【问题标题】:PHP imagecreatefromjpeg while keeping orientationPHP imagecreatefromjpeg 同时保持方向
【发布时间】:2017-08-30 22:54:33
【问题描述】:

我一直在开发我的图片上传网站。我正在尝试从我的 iPhone 拍照并将它们上传到我的网络服务器。

我的文件上传正常,但是我遇到的问题是我的所有图像都向左旋转了 90 度。

我的图片上传过程

$imageObject = imagecreatefromjpeg($_FILES["fileToUpload"]["tmp_name"]);
imagejpeg($imageObject, $target_file, 75);

创建一个新图像并将其上传到我的网络目录。我创建了一个新图像以删除所有 EXIF 数据(GPS 位置、我的所有个人信息)

问题是,当我上传图像时,它不会以纵向保存文件 (6)。它实际上并没有保存任何方向信息。这是 imagecreatefromjpeg 的明显副作用。但我所有的纵向风格图像都保存为横向格式。

我的问题是,我有什么办法可以在将方向数据保存到我的服务器后将其简单地重新写入新图像?

感谢大家的宝贵时间!

【问题讨论】:

    标签: php jpeg exif


    【解决方案1】:

    您可以读取 exif 信息并使用它来旋转或翻转您的图像。那么你就不再需要方向数据了。

    类似:

    $imageObject = imagecreatefromjpeg($_FILES["fileToUpload"]["tmp_name"]);
    
    # Get exif information
    $exif = exif_read_data($_FILES["fileToUpload"]["tmp_name"]);
    # Add some error handling
    
    # Get orientation
    $orientation = $exif['Orientation'];
    
    # Manipulate image
    switch ($orientation) {
        case 2:
            imageflip($imageObject, IMG_FLIP_HORIZONTAL);
            break;
        case 3:
            $imageObject = imagerotate($imageObject, 180, 0);
            break;
        case 4:
            imageflip($imageObject, IMG_FLIP_VERTICAL);
            break;
        case 5:
            $imageObject = imagerotate($imageObject, -90, 0);
            imageflip($imageObject, IMG_FLIP_HORIZONTAL);
            break;
        case 6:
            $imageObject = imagerotate($imageObject, -90, 0);
            break;
        case 7:
            $imageObject = imagerotate($imageObject, 90, 0);
            imageflip($imageObject, IMG_FLIP_HORIZONTAL);
            break;
        case 8:
            $imageObject = imagerotate($imageObject, 90, 0); 
            break;
    }
    
    # Write image
    imagejpeg($imageObject, $target_file, 75);
    

    【讨论】:

    • 非常感谢。这正是我所需要的。我确实遇到了一个问题,而我的服务器的可用内存量有限,并且会收到一条致命错误消息:致命错误:允许的内存大小为 67108864 字节已用尽(试图分配 122880 字节)我通过使用这行代码解决了这个问题旋转前:ini_set('memory_limit', '128M');
    【解决方案2】:

    创建图像保持纵横比:

    答案是Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多