Правильно, поэтому я решил построить функцию на PHP, которая могла бы объединить два изображения вместе, сохраняя прозрачный фон файлов PNG - что я успешно выполнил - используя код ниже ,imagecolortransparent() превращает все черные пиксели в PHP
function imageCreateTransparent($x, $y) {
$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 0, 0, 0);
imagecolortransparent($imageOut, $colourBlack);
return $imageOut;
}
function mergePreregWthQR($preRegDir, $qrDir){
$top_file = $preRegDir;
$bottom_file = $qrDir;
$top = imagecreatefrompng($top_file);
$bottom = imagecreatefrompng($bottom_file);
// get current width/height
list($top_width, $top_height) = getimagesize($top_file);
list($bottom_width, $bottom_height) = getimagesize($bottom_file);
// compute new width/height
$new_width = ($top_width > $bottom_width) ? $top_width : $bottom_width;
$new_height = $top_height + $bottom_height;
// create new image and merge
$new = imageCreateTransparent($new_width,$new_height);
imagecopy($new, $bottom, 0, $top_height+1, 0, 0, $bottom_width, $bottom_height);
imagecopy($new, $top, 0, 0, 0, 0, $top_width, $top_height);
$filename = "merged_file.png";
// save to file
imagepng($new, $filename);
}
mergePreregWthQR("file.png", "qr.png");
Это удалось объединить два изображения и сохранить прозрачный фон, единственная проблема в том, что любые черные цветные пиксели в присоединяемых изображений становился прозрачным, и результат этого слияния показано здесь> merged image
Верхнее изображение является желе lyfish image, внизу - QR-код, который можно увидеть только тогда, когда изображение помещено на любой фон, отличный от белого. Так что я уверен, что это происходит, это то, что imagecolortransparent ($ imageOut, $ colourBlack); превращает каждый черный пиксель во вновь созданном файле merged_file.png для прозрачности. Я проверил теорию, изменяя imageCreateTransparent ($ х, $ у) слегка к тому, что будет показано ниже,
function imageCreateTransparent($x, $y) {
$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 55, 55, 55);
imagefill ($imageOut, 0, 0, $colourBlack);
imagecolortransparent($imageOut, $colourBlack);
return $imageOut;
}
так что в этой функции я заполняя все изображение с цветом (55, 55 , 55), затем установив этот цвет прозрачным в моей функции imagecolortransparent(). Это делает трюк, и мой QR-код показан так, как должен. Единственная проблема в том, что я вижу это как быстрый и грязный хак, и если у кого-то есть цвет (55, 55, 55) в загруженном изображении, он станет прозрачным? Поэтому мне любопытно узнать, каким будет другое решение? Благодарю.
Вы когда-нибудь решали это? У меня такая же проблема ... – GhostCode