我正在使用ImageMagick创建已上传的PDF的微小JPG缩略图。代码工作正常。它是一个WordPress小部件,虽然这不一定是特定于WordPress的。
我对ImageMagick不熟悉,所以我希望有人可以告诉我这是不是很糟糕,或者没有遵循某种最佳做法,或者我冒着崩溃服务器的风险。
我的问题具体是:
整个小部件位于Pastebin:http://pastebin.com/WnSTEDm7
相关代码:
<?php
if ( $url ) {
$pdf = $url;
$info = pathinfo($pdf);
$filename = basename($pdf,'.'.$info['extension']);
$uploads = wp_upload_dir();
$file_path = str_replace( $uploads['baseurl'], $uploads['basedir'], $url );
$dest_path = str_replace( '.pdf', '.jpg', $file_path );
$dest_url = str_replace( '.pdf', '.jpg', $pdf );
exec("convert \"{$file_path}[0]\" -colorspace RGB -geometry 60 $dest_path"); ?>
<div class="entry">
<div class="widgetImg">
<p><a href="<?php echo $url; ?>" title="<?php echo $filename; ?>"><?php echo "<img src='".$dest_url."' alt='".$filename."' class='blueBorder' />"; ?></a></p>
</div>
<div class="widgetText">
<?php echo wpautop( $desc ); ?>
<p><a class="downloadLink" href="<?php echo $url; ?>" title="<?php echo $filename; ?>">Download</a></p>
</div>
</div>
<?php }
?>
正如您所看到的,窗口小部件会抓取附加到当前正在查看的页面的PDF,创建PDF的第一页图像,存储它,然后用HTML链接到它。
感谢您的帮助!
答案 0 :(得分:1)
当您以jpg格式保存时,请尝试在代码中添加-define:
exec("convert -define jpeg:size=60x60 \"{$file_path}[0]\" -colorspace RGB -geometry 60 $dest_path"); ?>
60x60是图像的最终尺寸 - 只需读取足够的数据即可创建图像,从而加快读取过程。
调整保持宽高,然后裁剪为60x60
exec("convert -define jpeg:size=60x60 \"{$file_path}[0]\" -colorspace RGB -thumbnail 60x60 -gravity center -crop 60x60+0+0 +repage $dest_path"); ?>
答案 1 :(得分:0)
所以我认为ImageMagick 在每个页面视图上重新生成缩略图。使用此窗口小部件的页面将需要额外的几秒钟才能加载。
因此,它现在进行简单的检查,看看缩略图是否已经存在:
if ( !file_exists( $dest_path ) ) {
exec("convert \"{$file_path}[0]\" -colorspace RGB -geometry 60 $dest_path");
};
加载约5秒钟的页面现在需要2-3个。
无论如何,我仍然有兴趣知道是否有人认为这可以做得更好。
希望这段代码可以帮助别人。