首页 > 解决方案 > imagick 只保存 gif 的第一帧

问题描述

我正在尝试制作一个安全的文件上传实用程序。这是处理图像清理的代码的一部分:所有元数据都被删除。目前其中一个令人讨厌的错误是它会破坏 .gif 文件:只有第一帧被保存。有人知道为什么吗?

function imageStripSaveAs($source, $dest){
    $image = new \Imagick(realpath($source));

    // apply orientation
    $orientation = $image->getImageOrientation();
    switch($orientation) {
        case imagick::ORIENTATION_BOTTOMRIGHT:
            $image->rotateimage("#000", 180); // rotate 180 degrees
        break;
        case imagick::ORIENTATION_RIGHTTOP:
            $image->rotateimage("#000", 90); // rotate 90 degrees CW
        break;
        case imagick::ORIENTATION_LEFTBOTTOM:
            $image->rotateimage("#000", -90); // rotate 90 degrees CCW
        break;
    } 

    // get profiles
    $profiles = $image->getImageProfiles("icc", true);

    // strip all metadata
    $image->stripImage();

    // re-apply profiles
    if(!empty($profiles)){
        $image->profileImage("icc", $profiles['icc']);
    }

    if ($format == 'GIF') {
        // ???
        $image->writeImages($dest, true);
    } else {
        $image->writeImage($dest); 
    }

    $image->clear();

    return true;
}

标签: phpgifimagick

解决方案


推荐阅读