0

当我在图像所在的同一文件夹中使用 imagick basics 使用 php 脚本并使用输出完美的文件名时,它会输出 PDF 第一页的图像:

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

这是挑战:如何将此脚本移动到不同的目录并使用从数据库记录中调用的名为 $uploaded 的字段名?我试过了,但没有用:

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

我在 /home/user/public_html/dir/folder/script.php:334 中收到“致命错误:未捕获的异常 'ImagickException' 和消息 '无法读取文件:$fileloc' 堆栈跟踪:#0 /home/user /public_html/dir/folder/script.php(334): Imagick->__construct('$fileloc') #1 /home/user/public_html/dir/folder/script.php(226): show_record(Array) #2 {main} 在第 334 行的 /home/user/public_html/dir/folder/script.php 中抛出

还尝试了 pathinfo() 和再次致命错误

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

$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"ÿÄÿÄ9 !1"#A2QVh'•¦Ôä$Waq±ÓÿÄÿÄ)!1Qq"A'Òar'¡áÿÚ?Íkßµ+¾;é=oÕÜŽW#ü–ÙænÝ»ë'çOo´OÒÝr2_^¬ÇiÓFãaR›5$ ò~\'0#Ïn¢—·©ÕuµðGMXÍ«ùÛæÿÃ'g§lfÍ,Ø”Sú*¥Áw“h‡/qk,=Ýržzï–>~Òút ƒÔ«á3žŽÃ‹¶s8yd“4–ݤ®§ ‚ÇqW¼ºÎ£‹Áß~.—´¤ŸÅKn@ «DE ±gÄ©"hm&㥰öÔ«b¬....

有什么帮助吗?

4

2 回答 2

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)-我相信它是开发的

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)."' />";
于 2012-08-08T19:47:07.423 回答
0

您的第一个示例不起作用的原因是因为您的变量包含在单引号内,而不是双引号内。

这个:

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

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

改为这样做:

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

至于您的第二个示例,我相信您遇到了问题,因为出于某种原因,您$im在使用引号时已将引号括起来echo。您应该像在工作测试中一样回应它:

echo $im;

不是

echo "$im";
于 2012-08-04T16:56:09.447 回答