2012-08-03 40 views
0

当我在图像所在的同一文件夹中使用imagick基础的php脚本,并使用文件名输出完美时,它会输出PDF第一页的图像:Imagick使用不同的目录和数据库PDF缩略图JPG

// Read page 1 
$im = new imagick('Miami_Guide.pdf[0]'); 
// Convert to png 
$im->setImageFormat("png"); 
// Send out 
header("Content-Type: image/png"); 
echo $im; 

以下是挑战:我如何将此脚本移动到不同的目录并使用名为$从数据库记录上传的字段名替代?我试过,但没有奏效:

$path: '../../otherplace/'; 
// $uploaded is the field with the filename value 
$fileloc: $path . $uploaded; 
// Read page 1 
$im = new imagick('$fileloc[0]'); 
// Convert to png 
$im->setImageFormat("png"); 
// Send out 
header("Content-Type: image/png"); 
echo $im; 

我得到一个“致命错误:未捕获的异常‘ImagickException’有消息‘无法读取文件:$ fileloc’在/ home /用户/的public_html /目录/folder/script.php:334堆栈跟踪:#0 /home/user/public_html/dir/folder/script.php(334):Imagick - > __ construct('$ fileloc')#1/home/user/public_html/DIR /文件夹/ script.php的(226):show_record(阵列)#2 {主}抛出/home/user/public_html/dir/folder/script.php上线334

还试图PATHINFO()和致死性错误再次

我做了一些调整,但现在Imagick返回gibb erish而不是图像:

$sourcePath = 'dir/folder/'; // Path of original image 
$sourceUrl = 'http://www.site.com/'; 
$thumbPath = $sourcePath; // Writeable thumb path 
$thumbUrl = $sourceUrl . $thumbPath . $uploaded ; 
$im = new Imagick($thumbUrl); 
$im->setImageFormat("jpg"); 
$im->thumbnailImage(100, 100); 
header("Content-type: image/jpg"); 
echo "$im"; 

“没有错误”,但输出乱码,而不是像:

ÿÛCÿÀdd “!ÿÄÿÄ91” #A2QVh'•|Ôä$ WAQ±ÓÿÄÿÄ)1QQ“A'Òar “¡阿玉Íkßμ+¾; E =oÕÜŽW#ü-ÙænÝ»ë'çOo'OÒÝr2_^¬ÇiÓFãaR> 5 $ O〜\'0#¢ - ·©ÕuμðGMXÍ«ùÛæÿÃ'g§lfÍ,Ø”苏* ¥AW“H‡/ QK,=Ýržzï->〜AOUTƒÔ«á3žŽÃ<¶s8yd“4-ݤ®§,ÇqW¼ºÎ£

任何帮助?

回答

0

你的第一个例子不工作的原因是因为你有单引号,不是双引号中的变量。

此:

$im = new imagick('$fileloc[0]'); 

告诉ImageMagick的寻找一个名为$fileloc文件,这当然是不存在的。

做到这一点,而不是:

$im = new imagick("$fileloc[0]"); 

至于你的第二个例子,我相信你有问题,因为某种原因,你已经把$im引号内,当你echo它。你应该呼应它,你在你的工作测试的方式相同:

echo $im; 

echo "$im"; 
+0

谢谢戈登,但它没有工作 – cchap 2012-08-08 19:38:23

+0

它有什么区别?你现在输出什么? – 2012-08-08 19:44:32

+0

我刚发布的解决方案:echo“”; – cchap 2012-08-08 19:49:08

0

这里是解决方案:的

代替:

echo $img; 

你应该回声:

echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />"; 

这解决了我的Imagick问题,我希望它能帮助别人。

我确定的一件事是测试基础:test.pdf> test.jpg,也进行了测试:test.pdf> test.png,test.pdf> test.tiff - 一旦我确定所有扩展名在代表中,工作正常,我转移到不同的目录并从其他地方拉取文件。

附图的所有步骤:

1-安装imagick(PHP) - 我相信这是devel的

2-路径设置为文件通HTTP://

3-其余几乎是Imagick的基本知识:

$pdfUrl = "http://www.site.com/dir/$file"; 
$img = new Imagick($pdfUrl); 
$img->setImageFormat("jpeg"); 
echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />"; 
+0

这并没有完成你最初设定的任务,即发送图像。在这里,你发送一个嵌入了图像的html代码片段,这根本不是一回事。 – 2012-08-08 19:54:03

+0

我知道,但自从3天后试图找到一个有点类似的解决方案,这解决了我的需求 - echo $ im;或回声“$ im”; - 都导致乱码和标题(“Content-type:image/jpg”);正在解决与代表错误 – cchap 2012-08-08 20:06:57

+0

足够公平,无论我想要的作品。 – 2012-08-08 20:13:01