PHP - 上传透明PNG图片

PHP - upload PNG image transparent

我想上传透明的 png 图像,我通过 google 尝试了很多东西,但仍然没有用,背景仍然是黑色。这是我的代码,它是用 symfony 2.7 编写的。正在上传创建两张图片,一张小,一张大。

Image before sending

Image after sending

所以在这里你可以看到上传前后图片的区别。

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())));
            }
            imagejpeg($tmp1, $filename1, 100);
            imagejpeg($tmp2, $filename2, 100);

JPEG 不支持透明度。您需要 imagepng 并改用 PNG 格式。

话虽这么说,你似乎有加载图像的代码(酌情使用 imagecreatefrom*),为什么不做同样的保存(image*)?