簡體   English   中英

使用ImageMagick有效地從PDF創建圖像

[英]Using ImageMagick to create an image from a PDF…efficiently

我正在使用ImageMagick創建一個已經上傳的PDF的小JPG縮略圖。 該代碼工作正常。 這是一個WordPress小部件,盡管不一定是WordPress特定的。

我不熟悉ImageMagick,所以我希望有人可以告訴我這是否看起來很糟糕,或者沒有遵循某些最佳實踐,或者是否有使服務器崩潰的風險。

我的問題具體是:

  • 該圖像是否已緩存,還是服務器每次有人查看該頁面時都必須重新生成該圖像? 如果緩存,確保服務器不必重新生成縮略圖的最佳方法什么?
  • 我試圖為ImageMagick創建一個單獨的文件夾(/ thumbs)以放入所有圖像,而不是用PDF的圖像弄亂WP上傳文件夾。 盡管在我的測試環境中對該文件夾有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鏈接到該頁面。

感謝您提供的所有幫助!

當您另存為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"); ?> 

因此,我認為ImageMagick 正在重新生成每個頁面視圖上的縮略圖。 帶有此小部件的頁面將花費額外的幾秒鍾時間。

因此,它現在進行簡單檢查以查看縮略圖是否已經存在:

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

現在,需要大約5秒鍾才能加載的頁面需要2-3。

無論如何,我仍然想知道是否有任何PHP人員認為可以做得更好。

希望這段代碼可以幫助別人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM