2010-10-13 6 views
1

J'essaie de générer une miniature simple à partir d'une image qui ne se trouve pas sur mon serveur en utilisant le wrapper iMagick pour ImageMagick. Pour une raison quelconque, le code suivant n'affichera rien quand appelé:Comment incorporer une image distante dans ImageMagick

<?php 
    $image = new Imagick("http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ"); 
    $image->thumbnailImage(100, 0); 
    header("Content-Type: image/jpg"); 
    echo $image; 
?> 

J'ai aussi essayé d'utiliser http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ.jpg en vain. Sur la base des commentaires ci-dessous, j'ai essayé cela aussi sans résultat, mais je ne suis pas sûr si la syntaxe est correcte.

<?php 
    $kunaki_image = file_get_contents("http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ"); 
    $name = tempnam("/tmp", "kunaki"); 
    $final = file_put_contents($name, $kunaki_image); 
    $image = new Imagick($final); 
    $image->thumbnailImage(100, 0); 
    header("Content-Type: image/jpg"); 
    echo $image; 
?> 

Quelqu'un a-t-il des suggestions?

Merci!

+0

obtenez-vous cette erreur? Erreur d'analyse: erreur de syntaxe, T_STRING inattendu dans /home/jmvarela/public_html/ihateyourjacket.com/game/image.php à la ligne 2 – Trufa

+0

non, je n'obtiens aucun résultat du tout. –

Répondre

2

Le constructeur d'ImageMagick est badly documented, donc je ne peux pas dire avec certitude, mais peut-être Imagick ne peut pas gérer les chemins de fichiers distants.

Essayez de l'extraire séparément, par ex. en utilisant file_get_contents() ou curl. Stockez-le localement sous un nom temporaire et transmettez-le.

+0

J'ai essayé avec l'image locale ce n'est pas bon non plus! – Trufa

+0

@Trufa signifie quoi exactement? Ce qui se produit? –

+0

Je reçois cette erreur: Erreur d'analyse: erreur de syntaxe, T_STRING inattendu dans /home/jmvarela/public_html/ihateyourjacket.com/game/image.php sur la ligne 2 avec l'un ou l'autre ... – Trufa

4

Je devais faire la même chose avec Youtube ... vous devez passer le chemin du fichier à ImageMagic, pas à l'instance file_put_contents.

<?php 
    $kunaki_image = file_get_contents("http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ"); 
    $name = tempnam("/tmp", "kunaki"); 
    file_put_contents($name, $kunaki_image); 
    $image = new Imagick($name); 
    $image->thumbnailImage(100, 0); 
    header("Content-Type: image/jpg"); 
    echo $image; 
?> 
1

un peu d'amélioration pour éviter d'écrire sur le disque:

<?php 
$handle = fopen("http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ", 'rb'); 
$image = new \Imagick(); 
$image->readImageFile($handle); 
fclose($handle); 
$image->thumbnailImage(100, 0); 
header("Content-Type: image/jpg"); 
echo $image; 
+0

Ceci est la meilleure solution à mon avis, car il ne crée pas de fichiers temporaires. Si vous voulez que cela fonctionne avec plus de formats d'image, alors jpg change la ligne d'en-tête en: header ('Content-Type: image /'.$ image-> getImageFormat()); – Kupe

1

si vous perfer CURL,

<?php 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
$resp = curl_exec($curl); 
$image = new \Imagick(); 
$image->readImageBlob($resp); 
$image->thumbnailImage(100, 0); 
header("Content-Type: image/jpg"); 
echo $image; 
Questions connexes