【问题标题】:PHP - upload PNG image transparentPHP - 上传PNG图片透明
【发布时间】:2018-01-13 07:52:23
【问题描述】:

我想上传透明的png图像,我通过谷歌尝试了很多东西,但仍然没有用,背景仍然是黑色的。这是我的代码,它是用 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())));
            }

【问题讨论】:

  • (您是否尝试在本地保存和查看 PNG?结果?)
  • 本地?如果您的意思是本地主机,那么它与服务器上的相同
  • 在本地保存/使用就像在没有上传你似乎不信任。
  • 本地没有黑底,是透明的,只有上传时才黑
  • 请发布您的两张图片的副本。

标签: php upload png transparency transparent


【解决方案1】:
            imagejpeg($tmp1, $filename1, 100);
            imagejpeg($tmp2, $filename2, 100);

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

话虽如此,您似乎在图像中加载了代码(酌情使用imagecreatefrom*),为什么不做同样的保存(image*)?

【讨论】:

  • 非常感谢,我没有意识到我将所有图像都保存为 jpeg 格式。 :)
猜你喜欢
  • 2013-08-26
  • 2011-08-31
  • 2013-07-17
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多