使用Imagick和Memcache来创建简易的缩略图缓存

环境

    • CentOS 7.X

 

    • Imagick

ImageMagick

Memcached

每次按照这个结构来做时,总是会因为名字混淆不清。

    1. ImageMagick是一个需要在服务器上安装的库。

 

    1. Imagick是使用PHP调用ImageMagick时的包装库。

 

    1. Memcached是一个缓存服务器。

 

    memcache是PHP的一个库,不过也有一个叫做memcached的库。

安装

    Memcachedインストール
# yum install memcached
# systemctl enable memcached.service
# systemctl start memcached.service
    memcacheインストール
# yum -y install php-pecl-memcache

# yum install php-pear
# yum install php-devel
    ImageMagickインストール
# yum install ImageMagick*
    Imagickインストール
# pecl install Imagick
# php -i | grep Imagick

示例代码

<?php
/**
 * 画像サムネイル&キャッシュ
 * @use 
 * http://{your_domain}/scripts/image-proxy.php?url=http://upload.wikimedia.org/wikipedia/commons/2/2a/2008_ZB_Viper_SRT-10_blue.jpg
 */
define('THUMB_WIDTH',   160);
define('THUMB_QUARITY', 80);

$url = $_GET['url'];

$imagick = new Imagick();

// URLをキーとして画像を保存
$memcached = new Memcached();
if ($memcached) {
    $memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);

    $memcached->addServer('127.0.0.1', 11211);

    $blob = $memcached->get($url);
    if ($blob) {
        // キャッシュあり
        trigger_error("Stored Cache : YES");
        $imagick->readimageblob($blob);
    } else {
        // キャッシュなし
        trigger_error("Stored Cache : NO");
        $handle = fopen($url, 'rb');
        $imagick->readImageFile($handle);
        $imagick->resizeImage(THUMB_WIDTH, 0, 0, 0);
        $imagick->setImageFormat('jpeg');
        $imagick->setImageCompressionQuality(THUMB_QUARITY);
        // キャッシュセット
        if (!$memcached->set($url, $imagick->getimageblob())) {
            trigger_error("Could not set Blob."); //  サーバーが落ちている
        }
    }
}

// 出力
header("Content-Type: image/jpeg");
exit($imagick->getImageBlob());
?>

由于最新的环境(Laravel + GD + Intervention Image)的雰围看起来很不错,我决定把之前在Pear或Pecl全盛期时写的旧版本也放上来。

广告
将在 10 秒后关闭
bannerAds