2016-04-26 3 views
1

Я пытаюсь создать файл jpeg путем слияния прозрачного png над jpeg. Я пробовал сеть & другие вопросы, но я не нашел то, что искал. Нижеприведенный код успешно работает в моей локальной среде, но как только я загружаю его на свой сервер [Godaddy/Linux], прозрачный фон png становится белым, таким образом, покрывая jpeg. Я попытался использовать 'imagecopyresampled' вместо 'imagecopy', как предложил here, но это не сработало. Есть ли что-то, что я делаю здесь неправильно? Проверенный сервер GD установлен. Любое предложение будет оценено по достоинству.Перекрытие прозрачное PNG над JPEG

$dest = imagecreatefromjpeg($jpegFileURL); 
$src = imagecreatefrompng($pngFileURL); 

list($destWidth, $destHeight) = getimagesize($jpegFileURL); 
list($srcWidth, $srcHeight) = getimagesize($pngFileURL); 

/*** 
* create base image 
*/ 
$base_image = imagecreatetruecolor($destWidth,$destHeight); 

/*** 
* make $base_image transparent 
*/ 
imagealphablending($base_image, false); 
$col = imagecolorallocatealpha($base_image,255,255,255,127); 
imagefilledrectangle($base_image,0,0,$destWidth,$destHeight,$col); 
imagealphablending($base_image,true); 
imagesavealpha($base_image, true); 

/*** 
* Copy JPEG & then PNG over JPEG 
*/ 
imagecopy($base_image, $dest, 0, 0, 0, 0, $destWidth, $destHeight); 
imagecopy($base_image, $src, 0, 0, 0, 0, $srcWidth, $srcWidth); 

/*** 
* Output the file 
*/ 
header('Content-Type: image/jpeg'); 
imagejpeg($base_image,$urlToSave); 

imagedestroy($dest); 
imagedestroy($src); 


EDIT: JPEG и PNG используется здесь также генерируется скриптом, который я затем использовать здесь, чтобы слиться.
Чтобы убедиться, что генерация файлов не была проблемой, я протестировал ее с помощью png с прозрачным фоном, не созданным моим кодом, и он сработал.
Таким образом, я предполагаю, что проблема может быть из поколения png.
Image attached for one that worked.
Код, используемый для генерации png.

$image = imagecreatefromjpeg($fileJpegURL); 
imagealphablending($image, true); 
$transparentcolour = imagecolorallocate($image, 255,255,255); 
imagecolortransparent($image, $transparentcolour); 

header('Content-Type: image/png'); 
imagepng($image, $pngFileSavePath, 1); 

ответ

0

Проблема решена! Как я уже догадался в редактировании, проблема заключалась в том, как создается прозрачный png.
Изменение, которое сработало для меня, было в этом разделе.
Хотя я не совсем в состоянии понять причину, но это дало результат, который я искал. Возможно, я растягивал строки кодирования без необходимости.
Благодарен за вход, который я получил, и любое просвещение приветствуется.


Ниже приведен дополнительный фрагмент, который мне нужно добавить, что я нашел от HERE.

$image = imagecreatefromjpeg($fileJpegURL); 
imagealphablending($image, false); //-- Change Here 
//-- 3 New lines added 
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparency); 
imagesavealpha($image, true); 

$transparentcolour = imagecolorallocate($image, 255,255,255); 
imagecolortransparent($image, $transparentcolour); 

header('Content-Type: image/png'); 
imagepng($image, $pngFileSavePath, 1); 
0

Много вашего кода не нужно, но в остальном оно работает. Его можно уменьшить до:

$dest = imagecreatefromjpeg($jpegFileURL); 
$src = imagecreatefrompng($pngFileURL); 

list($srcWidth, $srcHeight) = getimagesize($pngFileURL); 

/*** 
* make $base_image transparent 
*/ 
imagealphablending($dest, true); 

/*** 
* Copy JPEG & then PNG over JPEG 
*/ 
imagecopy($dest, $src, 0, 0, 0, 0, $srcWidth, $srcWidth); 

/*** 
* Output the file 
*/ 
imagejpeg($dest, $urlToSave); 

imagedestroy($dest); 
imagedestroy($src); 

Проверьте, нет ли ошибок при запуске скрипта на вашем сервере.

+0

Пробовал ваш фрагмент, отлично работал на местном уровне, но не везло на сервере. При запуске скрипта ошибок нет. –

+0

Вы проверили журнал ошибок сервера? Обычно 'error_reporting' отключен на производственных площадках. – timclutton

+0

Да, проверен журнал ошибок php, также отмечен error_reporting. Другие ошибки php были зарегистрированы, но ни один из них не был зарегистрирован, когда был запущен вышеприведенный фрагмент. –

Смежные вопросы