如何在ImageMagick中嵌入远程图像

时间:2010-10-13 14:52:29

标签: php image imagemagick imagick

我正在尝试使用ImageMagick的iMagick包装器从我的服务器上没有的图像生成简单的缩略图。出于某种原因,以下代码在调用时不会显示任何内容:

<?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;
?>

我也尝试使用http://kunaki.com/ProductImage.ASP?T=I&ST=FO&PID=PX003Y9EDJ.jpg无效。

根据下面的评论,我也尝试了这一点,没有结果,但我不确定语法是否正确。

<?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;
?>

有人有任何建议吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

我必须对Youtube做同样的事情......你需要将文件路径传递给ImageMagick,而不是file_put_contents实例。

答案 1 :(得分:2)

ImageMagick的构造函数是badly documented所以我无法确定,但Imagick可能无法处理远程文件路径。

尝试单独提取,例如使用file_get_contents()curl。以临时名称将其存储在本地,并将其传递给它。

答案 2 :(得分:2)

如果你更喜欢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;

答案 3 :(得分:1)

避免在磁盘上写字有一点改进:

<?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;