2010-01-08 6 views
1

Je suis en train de construire une classe qui fait de nombreuses opérations de photos, une méthode télécharger des images d'un utilisateur, mais j'ai besoin aussi de construire une méthode pour prendre une photo à partir d'une URL et Exécuter d'autres méthodes dessus comme s'il était téléchargé avec un formulaire POST de l'utilisateur.Enregistrement d'une image transparente à partir d'une URL en PHP

Ci-dessous mon début de la fonction pour obtenir l'image à partir de l'URL, cela fonctionne, mais les besoins fonctionnent toujours. Sous le code, vous pouvez voir une image résultant de l'exécution de cette fonction. Aussi est l'image originale pour voir à quoi cela devrait ressembler. Vous pouvez voir que cette fonction fait que l'image a un fond noir sur cette image transparente. Comment puis-je le rendre meilleur comme il devrait ressembler?

$url = 'http://a0.twimg.com/a/1262802780/images/twitter_logo_header.png'; 

//run our function 
savePhotofromURL($url, 'no'); 



// photo function should grab an photo from a URL 
function savePhotofromURL($photo_url, $saveimage = 'yes'){ 
    if(isset($photo_url) && $photo_url != '') { 

     //get info about photo 
     $photo_info = getimagesize($photo_url); 
     $source_width = $photo_info['0']; 
     $source_height = $photo_info['1']; 
     $source_type = $photo_info['mime']; 

     //grab the Photo from URL 
     $photo = imagecreatefromstring(file_get_contents($photo_url)); 

     if (is_resource($photo) === true){ 
      if($saveimage === 'yes'){ 
       // TO DO: resize image and make the thumbs code would go here if we are saving image: 
       // TO DO: resize source image if it is wider then 800 pixels 
       // TO DO: make 1 thumbnail that is 150 pixels wide 
      }else{ 
       // We are not saving the image show it in the user's browser 
       // TO DO: we will add in correct photo type soon 
       header('Content-Type: image/gif'); 
       imagejpeg($photo, null, 100); 
       imagedestroy($photo); 
      } 
     }else{ 
      // not a valid resource, show error 
      echo 'error getting URL photo from ' .$photo_url; 
     } 
    }else{ 
     // url of image was empty 
     echo 'The URL was not passed into our function'; 
    } 
} 

Le résultat ressemble à ceci
alt text http://img2.pict.com/52/05/1f/2429493/0/screenshot2b181.png

Au lieu de comme celui-ci alt text http://a0.twimg.com/a/1262802780/images/twitter_logo_header.png

Répondre

1

Les deux appels suivants raconteront php utiliser l'alpha mélange présent dans l'image .png:

 ImageAlphaBlending($photo, false); 
     ImageSaveAlpha($photo, true); 

Edit: Je vois que vous Sortez l'image en JPEG également. Les fichiers JPEG ne prennent pas en charge la transparence. Par conséquent, peu importe ce que vous faites, vous obtiendrez une couleur d'arrière-plan incorrecte. Voir aussi cette question connexe: PHP/GD ImageSaveAlpha and ImageAlphaBlending

+0

la sortie jpg vient de me jouer autour, je vais lui faire faire des choses différentes en fonction du type d'image, pour une image .png je vais sortie ou enregistrer une image png. J'ai essayé ImageAlphaBlending ($ photo, false); et ImageSaveAlpha ($ photo, true); mais ça ne semble pas changer quoi que ce soit même quand la sortie est PNG – JasonDavis

+0

Ça a fonctionné maintenant, a dû changer un peu plus de choses, merci – JasonDavis

0

Vous devez ajouter un meilleur support pour les types d'image et par extension leur transparence.

Depuis l'image est transparente, nous pouvons savoir que c'est un GIF ou un PNG mais l'envoi de l'en-tête GIF tout en utilisant imagejpeg() - jpegs ne supportent aucune sorte de transparence. Mais si c'est un png, vous devrez peut-être aussi tenir compte de sa transparence alpha trans ou index.

+0

oui je prévois d'ajouter cela, je viens d'ajouter la possibilité d'obtenir le type d'image avant posté cela, donc je n'ai pas ajouté de code pour utiliser ces données pour le moment – JasonDavis

Questions connexes