3

私は一般的なPHPベースのCMSを使用しています。私は、PDFを読み取ってサムネイルを作成し、それをキャッシュするスクリプトを作成したいと考えていました。さまざまな答えがたくさんあり、imagickのさまざまなバージョンでかなりの数の問題が発生しましたが、これは私にとってはうまくいったスクリプトです。

一部の人々はそれが有用であると思うかもしれません、そして多分誰かがそれが最適化されているなら私にアドバイスすることができますか?

<?php

$loc = *the file location*;
$pdf = *the file name*;
$format = "jpg";
$dest = "$loc$pdf.$format";

if (file_exists($dest))
        {
        $im = new imagick();
        $im->readImage($dest);
        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
        }
else
    {
        $im = new imagick($loc.$pdf.'[0]');
        $im->setImageFormat($format);

        $width = $im->getImageheight();
        $im->cropImage($width, $width, 0, 0);
        $im->scaleImage(110, 167, true);

        $im->writeImage($dest);

        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
    }

?>
4

3 に答える 3

2

PHPとImageMagickを活用してPDFサムネイルを作成します

http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/

この記事では、PHPとImageMagickを使用して特定のPDFからサムネイルを生成し、それらを一時(または「キャッシュ」)ディレクトリに保存して、Webに提供する方法について説明します。

最近のクライアントの1つが、展開したJoomlaCMSを介して公開されたPDFサムネイルの表示をリクエストしました。

要件はかなり単純でしたが、実行はもう少し複雑でした。ImageMagickをインストールし、ImageMagick PHPバインディング(偶然に機能せず、回避策が考案されました)をインストールし、いくつかのコードを調べた後、次の解決策が決定されました。

<?php
function thumbPdf($pdf, $width)
{
    try
    {
        $tmp = 'tmp';
        $format = "png";
        $source = $pdf.'[0]';
        $dest = "$tmp/$pdf.$format";

        if (!file_exists($dest))
        {
            $exec = "convert -scale $width $source $dest";
            exec($exec);
        }

        $im = new Imagick($dest);
        header("Content-Type:".$im->getFormat());
        echo $im;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}

$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
    thumbPdf($file, $size);
}
?>

上記のコードは、一時ディレクトリ(通常、勇気のレベルに応じてchmod755またはchmod777)に適切なアクセス許可を提供し、上記のコードスニペットをthumbPdf.phpというファイルに保存して配置したことを前提としています。これはWebサーバーのどこかに表示されます。

GETからパラメータを取得した後、コードは宛先の一時ディレクトリをチェックし、目的の画像が存在しない場合は、ImageMagickの変換プログラムを使用してPDFサムネイルを生成し、適切な比率に縮小して、画像を一時ディレクトリに保存します。最後に、サムネイルをImageMagick PHPオブジェクトにリロードし、コンテンツをブラウザに出力します。

上記のコードの呼び出しはかなり簡単に実行できます。次のように、画像タグ内からPHPスクリプトを呼び出すだけです。

<img src="/path/to/thumbPdf.php?pdf=your.pdf&size=200" />

上記のコードは、「your.pdf」の最初のページから、幅200ピクセル、高さに適切な比率のサムネイルを生成します。

頑張って、そして幸せなウェブマスター!

于 2012-10-08T14:34:19.867 に答える
2

私はそれがここで議論されていることを知っています:

ImageMagickにPHP拡張機能を使用する必要がありますか、それともPHPのExec()関数を使用してターミナルコマンドを実行する必要がありますか?

そしてdrew101を引用するには:

execまたは同様の関数を使用する代わりに、PHP拡張機能を使用すると多くのメリットがあります。組み込みの拡張機能は、新しいプロセスを生成して出力を読み戻す必要がないため、より高速でメモリの使用量が少なくなります。画像オブジェクトは、ファイル出力を読み取る必要がなく、PHPで直接利用できるようになります。これにより、画像の操作が簡単になります。

忙しいサイトの場合、画像を編集するための多くのプロセスを作成すると、処理速度が低下し、追加のメモリを消費する可能性があります。

于 2012-10-09T17:10:23.623 に答える
1

何らかの理由でImagickphpライブラリをインストールしていない場合は、ゴーストスクリプトを使用し、次の例を使用してpdfのサムネイルを生成できます。

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=xyz.jpg xyz.pdf');
于 2015-09-04T12:59:24.100 に答える