У меня есть изображение (назовем его исходное изображение ), на котором я хочу нанести водяное изображение на другое изображение (назовем его logo ).
logo является прозрачным PNG, тогда как исходное изображение может быть png, jpg или gif.
У меня есть следующий код:
function watermarkImage($originalFileContents, $originalWidth, $originalHeight) {
$logoImage = imagecreatefrompng('logo.png');
imagealphablending($logoImage, true);
$logoWidth = imagesx($logoImage);
$logoHeight = imagesy($logoImage);
$originalImage = imagecreatefromstring($originalFileContents);
$destX = $originalWidth - $logoWidth;
$destY = $originalHeight - $logoHeight;
imagecopy(
// source
$originalImage,
// destination
$logoImage,
// destination x and y
$destX, $destY,
// source x and y
0, 0,
// width and height of the area of the source to copy
$logoWidth, $logoHeight
);
imagepng($originalImage);
}
Этот код работает хорошо (хорошо= сохранять прозрачность логотипа ) только в том случае, если исходное изображение является файлом JPG.
Когда исходный файл представляет собой GIF или PNG,Логотип имеет сплошной белый фон, что означает, что прозрачность не работает.
Почему?Что мне нужно изменить, чтобы оно работало?
Спасибо
ОБНОВЛЕНИЕ:
Вот моя перекодированная версия:
function generate_watermarked_image($originalFileContents, $originalWidth, $originalHeight, $paddingFromBottomRight = 0) {
$watermarkFileLocation = 'watermark.png';
$watermarkImage = imagecreatefrompng($watermarkFileLocation);
$watermarkWidth = imagesx($watermarkImage);
$watermarkHeight = imagesy($watermarkImage);
$originalImage = imagecreatefromstring($originalFileContents);
$destX = $originalWidth - $watermarkWidth - $paddingFromBottomRight;
$destY = $originalHeight - $watermarkHeight - $paddingFromBottomRight;
// creating a cut resource
$cut = imagecreatetruecolor($watermarkWidth, $watermarkHeight);
// copying that section of the background to the cut
imagecopy($cut, $originalImage, 0, 0, $destX, $destY, $watermarkWidth, $watermarkHeight);
// placing the watermark now
imagecopy($cut, $watermarkImage, 0, 0, 0, 0, $watermarkWidth, $watermarkHeight);
// merging both of the images
imagecopymerge($originalImage, $cut, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight, 100);
}