загрузить PNG изображение прозрачным

Я хотел бы загружать PNG изображения прозрачным, я пробовал много вещей через Google, но по-прежнему не работает, по-прежнему черный фон. Вот мой код, он написан на Symfony 2.7. Он загружает и создает два изображения, одно маленькое, второе большое.

Изображение перед отправкой

Изображение после отправки

Так что здесь вы можете увидеть разницу между изображениями до загрузки и после загрузки.

if ($upload_type == 'image/png' || $upload_type == 'image/jpg' || $upload_type == 'image/jpeg' || $upload_type == 'image/gif') {
$filename = stripslashes($upload_name);
$extension = $this->getExtension($filename);
$extension = strtolower($extension);

if ($extension == "jpg" || $extension == "jpeg") {
$upload_temp = $_FILES['form-chat-send-image']['tmp_name'];
$src = imagecreatefromjpeg($upload_temp);
} else if ($extension == "png") {
$upload_temp = $_FILES['form-chat-send-image']['tmp_name'];
$src = imagecreatefrompng($upload_temp);
} else {
$src = imagecreatefromgif($upload_temp);
}

list($width, $height) = getimagesize($upload_temp);
$newWidth1 = $width;
$newHeight1 = $height;
if($width>1200 || $height>1200) {
if ($height < $width) {
$newWidth1 = 1200;
$newHeight1 = ($height / $width) * $newWidth1;
} else {
$newHeight1 = 1200;
$newWidth1 = ($width / $height) * $newHeight1;
}
}
$tmp1 = imagecreatetruecolor($newWidth1, $newHeight1);
$newWidth2 = $width;
$newHeight2 = $height;
if($width>220 || $height>220) {
if ($height < $width) {
$newWidth2 = 220;
$newHeight2 = ($height / $width) * $newWidth2;
} else {
$newHeight2 = 220;
$newWidth2 = ($width / $height) * $newHeight2;
}
}
$tmp2 = imagecreatetruecolor($newWidth2, $newHeight2);
imagecolortransparent($tmp2, imagecolorallocate($tmp2, 0, 0, 0));
imagealphablending( $tmp2, false );
imagesavealpha( $tmp2, true );

imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newWidth1, $newHeight1,
$width, $height);

imagecopyresampled($tmp2, $src, 0, 0, 0, 0, $newWidth2, $newHeight2,
$width, $height);

$dateName = new \DateTime();
$newName = $conversation->getId().'-'.$dateName->format('m_d_Y_H_i_s');

$filename1 = $uploadTo . $newName . "." . $extension;
$filename2 = $uploadTo . "small/" . $newName . "." . $extension;

imagejpeg($tmp1, $filename1, 100);
imagejpeg($tmp2, $filename2, 100);

imagedestroy($src);
imagedestroy($tmp1);
imagedestroy($tmp2);
$uploadDB = $newName . "." . $extension;

$msgImg = new Message();
$msgImg->setText($uploadDB);
$msgImg->setConversation($conversation);
$msgImg->setForm('img');
if($type==2){
$msgImg->setType(0);
}
else if($type==1){
$msgImg->setType(1);
}
$em->persist($msgImg);
$em->flush();

$_FILES = array();
return $this->redirect($this->generateUrl('conversation',array('id'=>$conversation->getId())));
}

1

Решение

            imagejpeg($tmp1, $filename1, 100);
imagejpeg($tmp2, $filename2, 100);

JPEG не поддерживает прозрачность. Тебе нужно imagepng и вместо этого используйте формат PNG.

При этом, кажется, у вас есть код, который загружается в изображение (используя imagecreatefrom* при необходимости) почему бы не сделать то же самое для сохранения (image*)?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]