@lexstile

Как правильно наложить одно изображение на другое на php?

Суть такая:
Мне нужно наложить одно изображение (.jpg) на другое (.png).
На выходе должно остаться .png, так как .jpg будет внутри.
Делаю так, на выходе .jpg:
<?php
$file_dir = $_POST['file_dir'];
$file_width = $_POST['file_width'];
$file_height = $_POST['file_height'];
$file_posX = $_POST['file_posX'];
$file_posY = $_POST['file_posY'];
$file_bckg = $_POST['file_bckg'];

$path = $_SERVER['DOCUMENT_ROOT'];
$imgBig = '/ajax/dist/square.png';
if($file_bckg == 'circle'):
$imgBig = '/ajax/dist/circle.png';
endif;
$imgSmall = $file_dir;

/* ------------------------ */

list($width, $height) = getimagesize($path.$file_dir);

$thumb = imagecreatetruecolor($file_width, $file_height);
$source = imagecreatefromjpeg($path.$file_dir);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $file_width, $file_height, $width, $height);
$target = '/ajax/resize_img/'.date("d_m_Y_H_i_s")."_".rand(0,1000).".jpg";
imagejpeg($thumb, $path.$target, 100);
$img_resize = $target;
unset($target);
/* ------------------------ */

$img1 = imagecreatefrompng($path . $imgBig);
$img2 = imagecreatefromjpeg($path . $img_resize);

if($img1 and $img2) {	
    $x2 = imagesx($img2);
    $y2 = imagesy($img2);
    imagecopyresampled($img1,$img2,$file_posX,$file_posY,0,0,$x2,$y2,$x2,$y2);
	$target = '/ajax/save_img/'.date("d_m_Y_H_i_s")."_".rand(0,1000).".jpg";
    imagejpeg($img1, $path.$target, 100);

	echo $target;
	
} else {
    header('HTTP/1.1 404 Not Found');
}
?>

И еще одна проблема, при наложении затирается часть .png:
5acb852359311676716578.jpeg
Оригинал:
5acb8554468e2109504426.png
  • Вопрос задан
  • 237 просмотров
Решения вопроса 1
@Yan-s
Попробуйте библиотеку image.intervention.io для манипуляции изображениями, будет проще и понятнее.

Можно предположить, что потерянная часть на png изображении имела прозрачность и после слияния получила черный фон. Проверьте в графическом редакторе этот участок оригинала.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы