You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP无需Imagick扩展移除图片方向EXIF信息的实现方法

GD库实现EXIF移除+方向修正方案

GD库重新生成并保存图片时,默认不会写入任何EXIF信息,天然满足剥离EXIF的需求。只需要在检测到非1的方向参数时,按照EXIF标准将图片旋转/翻转至正确朝向,再覆盖原文件即可,处理后的图片可直接进入后续缩放流程,不会再出现异常旋转问题。

EXIF方向参数对应操作规则

不同Orientation值对应的GD处理逻辑如下:

  • 2:水平翻转图片
  • 3:将图片旋转180度
  • 4:垂直翻转图片
  • 5:垂直翻转后顺时针旋转90度
  • 6:顺时针旋转90度
  • 7:水平翻转后顺时针旋转90度
  • 8:逆时针旋转90度

替换后完整函数代码

function removeExif($filename) {
    if (!function_exists('exif_read_data')) {
        return false;
    }
    $exif = exif_read_data($filename);
    if(!$exif || !isset($exif['Orientation']) || $exif['Orientation'] == 1){
        return true;
    }
    $orientation = $exif['Orientation'];
    // 获取图片基础信息,匹配对应GD加载函数
    $imgInfo = getimagesize($filename);
    $mime = $imgInfo['mime'];
    switch ($mime) {
        case 'image/jpeg':
            $img = imagecreatefromjpeg($filename);
            $saveFunc = 'imagejpeg';
            break;
        case 'image/png':
            $img = imagecreatefrompng($filename);
            $saveFunc = 'imagepng';
            break;
        case 'image/gif':
            $img = imagecreatefromgif($filename);
            $saveFunc = 'imagegif';
            break;
        default:
            // 不支持的格式直接返回
            return false;
    }
    // 根据方向值做对应变换
    switch ($orientation) {
        case 2:
            imageflip($img, IMG_FLIP_HORIZONTAL);
            break;
        case 3:
            $img = imagerotate($img, 180, 0);
            break;
        case 4:
            imageflip($img, IMG_FLIP_VERTICAL);
            break;
        case 5:
            imageflip($img, IMG_FLIP_VERTICAL);
            $img = imagerotate($img, 90, 0);
            break;
        case 6:
            $img = imagerotate($img, -90, 0);
            break;
        case 7:
            imageflip($img, IMG_FLIP_HORIZONTAL);
            $img = imagerotate($img, 90, 0);
            break;
        case 8:
            $img = imagerotate($img, 90, 0);
            break;
    }
    // 覆盖保存原文件,GD保存默认不携带EXIF,JPEG可传第三个参数设置质量0-100,例:$saveFunc($img, $filename, 90)
    $saveFunc($img, $filename);
    // 释放内存
    imagedestroy($img);
    return true;
}

注意事项

  • 该实现依赖PHP内置GD库,不需要安装任何额外扩展,exif_read_data、GD相关处理函数均为PHP默认启用的原生能力
  • 处理PNG、GIF格式时注意保留原有的透明度配置,可根据业务需要补充对应的alpha通道保留逻辑
  • 保存后的图片已完全移除所有EXIF信息,方向为正确的物理朝向,后续执行缩放、生成缩略图逻辑时不会再出现方向错误

内容的提问来源于stack exchange,提问作者Darksymphony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:27:17