Как вставить подпись в нижней части изображения в php?
Я хочу вставить подпись (сохраненную как файл png) в нижней части буквы (сохраненной как файл jpg) на php-сайте.
Я использовал imagecopymerge
, но вместо моего запроса он создает черный файл изображения.
Я тоже использовал этот код, но никакого результата.
function merge($filename_x, $filename_y, $filename_result) {
list($width_x, $height_x) = getimagesize($filename_x);
list($width_y, $height_y) = getimagesize($filename_y);
$image = imagecreatetruecolor($width_x + $width_y, $height_x);
$image_x = imagecreatefromjpeg($filename_x);
$image_y = imagecreatefromgif($filename_y);
imagecopy($image, $image_x, 0, 20, 30, 50, $width_x, $height_x);
imagecopy($image, $image_y, $width_x, 0, 10, 0, $width_y, $height_y);
imagejpeg($image, $filename_result);
imagedestroy($image);
imagedestroy($image_x);
imagedestroy($image_y);
}
merge('myimg.jpeg', 'first.gif', 'merged.jpg');
Ответы
Ответ 1
Пожалуйста, попробуйте эту функцию, я настроил ваш.
function merge($filename_x, $filename_y, $filename_result) {
$source = imagecreatefromjpeg($filename_x);
$tobeMerged = imagecreatefromgif($filename_y);
//add signature on bottom right
imagecopymerge($source, $tobeMerged, imagesx($source) - imagesx($tobeMerged), imagesy($source) - imagesy($tobeMerged), 0, 0, imagesx($tobeMerged), imagesy($tobeMerged), 100);
//save your merged image
imagejpeg($source, $filename_result);
//destroy image resources to free memory
imagedestroy($source);
imagedestroy($tobeMerged);
}
merge('myimg.jpeg', 'first.gif', 'merged.jpg');
Ответ 2
Эта функция работает для меня. Поскольку я не видел ваших изображений, я могу рассказать вам, что я использую для тестирования.
- bg.jpg = 400X400 jpg
- fg.gif = 200X200 gif (с прозрачным фоном)
function merge($filename_x, $filename_y, $filename_result) {
list($width_x, $height_x) = getimagesize($filename_x);
list($width_y, $height_y) = getimagesize($filename_y);
$image = imagecreatetruecolor($width_x, $height_x);
$image_x = imagecreatefromjpeg($filename_x);
$image_y = imagecreatefromgif($filename_y);
imagecopy($image, $image_x, 0, 0, 0, 0, $width_x, $height_x);
imagecopy($image, $image_y, 0, 0, 0, 0, $width_y, $height_y);
imagejpeg($image, $filename_result);
imagedestroy($image);
imagedestroy($image_x);
imagedestroy($image_y);
}
merge('bg.jpg', 'Untitled.gif', 'merged.jpg');
Кажется, это работает нормально. Я предполагаю, что у вас возникают проблемы с позиционированием. Попробуйте все в начальной позиции 0, затем начните движение, пока не получите желаемый эффект.
Ответ 3
Можно ли запускать инструменты командной строки (например, через exec)? Если это так, imagemagick инструменты командной строки могут делать практически любые манипуляции с изображениями, которые вам нужны. функция наслаивания звучит так, как вы:
echo exec('composite -geometry +5+10 image1.jpg image2.png image2.png');
Ответ 4
Ваш gif может иметь цветовую палитру и не является истинным цветным изображением. Если ваша версия php имеет 5+ проверку с помощью imageistruecolor и в случае использования imagepalettetotruecolor.