2017-08-05 26 views
1

私は透明なPNG画像をアップロードしたいと思いますが、私はまだ多くのものを試してみましたが、まだ背景は黒です。ここで私のコードは、symfony 2.7で書かれています。アップロードして2つの画像を作成しています.1つは小さく、もう1つは大きくなっています。だからここにあなたがアップロードする前に、アップロードした後、画像間の違いを見ることができますPHP - アップロードPNG画像透明

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()))); 
      } 
+0

(PNGをローカルに保存して表示しましたか?結果は?) – greybeard

+0

はローカルですか?あなたがローカルホストを意味するならば、それはサーバー上と同じです – Kchaan

+0

*アップロードなしでローカルで*使用する*あなたは不信と思われる。 – greybeard

答えて

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

JPEGは透明度をサポートしていません。 imagepngが必要で、代わりにPNG形式を使用してください。

画像にロードするコードがあると思われます(imagecreatefrom*を適切に使用してください)、同じ理由で保存しないでください(image*)?

+0

の前/後の画像で質問を編集しました。私はすべての画像をjpeg形式で保存していることに気付きませんでした。 :) – Kchaan

関連する問題