dongwen5870 2017-08-05 05:50
浏览 183
已采纳

PHP - 上传PNG图像透明

I would like to upload png images transparent, I tried many things via google but still didnt work, still background is black. Here is my code, it is written in symfony 2.7. It is uploading and creating two images, one is small, the second is big.

Image before sending

Image after sending

So here you can see difference between images before upload and after upload.

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条回答 默认 最新

  • dsfo22654 2017-08-07 04:56
    关注
                imagejpeg($tmp1, $filename1, 100);
                imagejpeg($tmp2, $filename2, 100);
    

    JPEG does not support transparency. You need imagepng and use PNG format instead.

    That being said, you seem to have code that loads in the image (using imagecreatefrom* as appropriate), why not do the same for saving (image*)?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部