0

我正在使用 ImageMagick 创建已上传 PDF 的微小 JPG 缩略图。代码工作正常。这是一个 WordPress 小部件,尽管这不一定是 WordPress 特定的。

我不熟悉 ImageMagick,所以我希望有人能告诉我这是否看起来很糟糕或者没有遵循某种最佳实践,或者我是否冒着使服务器崩溃的风险。

具体来说,我的问题是:

  • 该图像是否已缓存,或者服务器是否必须在每次有人查看该页面时重新生成该图像?如果它没有被缓存,那么确保服务器不必重新生成缩略图的最佳方法是什么?
  • 我尝试为 ImageMagick 创建一个单独的文件夹 (/thumbs) 以将所有图像放入其中,而不是将 WP 上传文件夹与 PDF 图像混淆。尽管我的测试环境中的文件夹有 777 权限,但它一直抛出权限错误。为什么?源/目标目录是否必须相同?
  • 我在这里做的事情是否不正确/效率低下需要改进?

整个小部件都在 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 链接到它。

感谢您的任何帮助!

4

2 回答 2

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"); ?> 
于 2012-06-11T14:39:06.870 回答
0

所以我认为 ImageMagick在每个页面视图上重新生成缩略图。带有此小部件的页面将需要额外的几秒钟才能加载。

所以,它现在做一个简单的检查,看看缩略图是否已经存在:

if ( !file_exists( $dest_path ) ) {
    exec("convert \"{$file_path}[0]\" -colorspace RGB -geometry 60 $dest_path");
};

加载大约需要 5 秒的页面现在需要 2-3 秒。

无论如何,我仍然很想知道是否有任何 PHP 人认为这可以做得更好。

希望这段代码可以帮助某人。

于 2012-06-11T13:25:35.470 回答