PHP로 이미지에 오버레이 텍스트
5851 단어 phpprogramming
이것은 명령줄에서 직접 실행할 수 있는 몇 가지 가정이 있는 간단한 PHP 스크립트입니다. 워터마크 이미지, 모바일에 최적화된 이미지, Google 스프레드시트 또는 Airtable에서 데이터 읽기 등과 같은 더 복잡한 요구 사항을 충족하도록 쉽게 조정할 수 있으므로 자유롭게 저장소를 포크하거나 소스를 다운로드하고 필요에 따라 해킹하세요. .
아래 코드로 이동합니다.
이것으로부터…
…이에
코드에.
<?php
먼저, 코드에서 이 항목이 설정되는 위치를 파악하지 않고도 스크립트 동작을 조정할 수 있는 몇 가지 변수입니다.
$csv_file = 'names.csv';
$background = 'background.jpg';
$signature = 'sig.png';
$font = 'ConeriaScript.ttf';
그런 다음 CSV 파일을 읽고 구문 분석하여 열 이름을 키로 사용하여 연관 배열로 변환하여 나중에 읽기 쉽도록 합니다.
// CSV code from https://www.php.net/manual/en/function.str-getcsv.php
$csv = array_map('str_getcsv', file($csv_file));
array_walk($csv, function (&$a) use ($csv) {
$a = array_combine($csv[0], $a);
});
array_shift($csv);
이 특정 배경을 위해 세 개의 다른 위치에 배치할 세 개의 문자열로 현재 날짜가 필요합니다.
$day = date('j');
$month = date('F');
$year = date('Y');
이제 우리는 PHP의 이미지 기능을 즐기기 시작합니다. 먼저 배경 이미지를 읽어서 기본 정보를 얻고 텍스트 색상, 이미지 너비(텍스트 중앙 정렬용) 설정, 서명 이미지 및 크기 읽기와 같은 몇 가지 준비 작업을 수행해야 합니다.
$image = imagecreatefromjpeg($background);
$color = imagecolorallocate($image, 0, 0, 0);
$width = imagesx($image);
$signature = imagecreatefrompng($signature);
$signature_width = imagesx($signature);
$signature_height = imagesy($signature);
이제 이미지 데이터가 준비되었으므로 목록의 각 이름을 읽기 시작하여 오버레이된 모든 텍스트로 개별 이미지를 생성할 수 있습니다. 읽기 쉽도록 이름과 이유를 자체 변수에 저장하고 있습니다.
foreach ($csv as $row) {
$name = $row['Name'];
$reason = $row['Reason'];
여기에서 다시 배경 이미지를 읽고 있습니다. 루프의 첫 번째 항목의 경우 위에서 이미 읽었기 때문에 이치에 맞지 않지만 모든
image*
함수가 입력을 변경하므로 이 작업을 수행하지 않으면 목록의 모든 이미지가 종료됩니다. 모든 이전 이미지의 이전 텍스트가 겹쳤습니다. 안좋다. 또한 기본적으로 내 텍스트의 네 모서리 위치인 "묶인 상자"라는 텍스트도 표시됩니다. 이미지의 텍스트를 중앙에 배치할 수 있도록 이 작업을 수행합니다. $image = imagecreatefromjpeg($background);
$name_box = imagettfbbox(40, 0, $font, $name);
$reason_box = imagettfbbox(40, 0, $font, $reason);
이제 실제로 이미지에 텍스트를 렌더링할 차례입니다. 대상 이미지, 텍스트 크기, 각도, x 및 y 위치, 색상, 글꼴(예, 글꼴을 사용할 수 있습니다!), 마지막으로 실제 텍스트를 포함하여 일부 정보를 PHP에 제공하면 됩니다.
imagettftext($image, 40, 0, ($width - $name_box[2]) / 2, 635, $color, $font, $name);
imagettftext($image, 40, 0, ($width - $reason_box[2]) / 2, 790, $color, $font, $reason);
imagettftext($image, 32, 0, 400, 895, $color, $font, $day);
imagettftext($image, 32, 0, 600, 895, $color, $font, $month);
imagettftext($image, 32, 0, 600, 975, $color, $font, $year);
텍스트가 올바르게 오버레이되면 보기 좋게 표시되도록 텍스트 위에 "서명"이미지를 추가해야 하므로 보시다시피 서명 이미지(투명한 PNG 파일)를 위에 복사하도록 PHP에 지시합니다. 위치뿐만 아니라 크기도 제공해야 했습니다.
imagecopy($image, $signature, 400, 980, 0, 0, $signature_width, $signature_height);
거의 다 왔어! 여기에서는 이름을 제공하여 결과 이미지를 디스크에 저장합니다. 저는 이름을 제공하지 않았습니다. PHP는 콘텐츠를 출력할 것입니다. 대신 올바른
header
를 제공하여 다운로드 링크로 사용할 수 있습니다. imagejpeg($image, "diplomas/$name.jpg");
나는 내 기억을 어지럽히고 싶지 않기 때문에 일단 이미지가 끝나면 파괴됩니다.
imagedestroy($image);
그리고 목록의 다음 항목으로 이동합니다!
}
보시다시피 이것은 다양한 목적으로 사용할 수 있는 매우 간단하면서도 강력한 스크립트입니다. 부담 없이 see or fork the full project 이 예에서 사용된 이미지 기능에 대한 링크는 다음과 같습니다.
이 게시물을 즐기시고 유용하게 사용하시길 바랍니다!
PHP
Reference
이 문제에 관하여(PHP로 이미지에 오버레이 텍스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/bearveloper/overlay-text-on-images-with-php-4ccf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(PHP로 이미지에 오버레이 텍스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bearveloper/overlay-text-on-images-with-php-4ccf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)