0

ImageMagickを使用して、アップロード済みのPDFの小さなJPGサムネイル画像を作成しています。コードは正常に機能します。これはWordPressウィジェットですが、必ずしもWordPress固有ではありません。

私はImageMagickに慣れていないので、これがひどいように見えるか、ある種のベストプラクティスに従っていないか、またはサーバーをクラッシュさせるリスクがあるかどうかを誰かに教えてもらいたいと思っていました。

具体的には、私の質問は次のとおりです。

  • その画像はキャッシュされていますか、それとも誰かがページを表示するたびにサーバーが画像を再生成する必要がありますか?キャッシュされていない場合、サーバーがサムネイルを再生成する必要がないことを確認するための最良の方法は何ですか?
  • WPアップロードフォルダをPDFの画像で乱雑にするのではなく、ImageMagick用に別のフォルダ(/ thumbs)を作成してすべての画像を入れようとしました。テスト環境のフォルダーに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 に答える