【问题标题】:Save image from one format to another with php gd2使用 php gd2 将图像从一种格式保存为另一种格式
【发布时间】:2011-05-08 18:59:45
【问题描述】:

我有一个数据库,其中有一列填充了图像二进制数据。在我做了一些研究之后,我弄清楚了如何检测数据是哪种图像格式。假设我的图像列中的记录是 gif 格式,现在我想用 php gd2 将其保存为 jpeg 格式。请问,谁能告诉我该怎么做?

【问题讨论】:

    标签: php image-manipulation binary-data gd2


    【解决方案1】:

    如果您只想将图像数据转换为 JPEG,那么您只需要imagecreatefromstringimagejpeg。基本上:

    imagejpeg(imagecreatefromstring($gif_bindata), "temp.jpeg");
    $jpeg_bindata = file_get_contents("temp.jpeg");
    

    就这么简单,因为imagecreatefromstring 会自动检测文件类型(前几个字节包含足够的魔法字节,使检测变得可行)。显然,您可能想改用real temporary filename

    【讨论】:

    • 有吗?非常好,不知道。 +1
    • 我托盘,但是当我托盘打开它时,我从图像查看器(GNOME 2.30.0 的眼睛)收到以下错误“解释 JPEG 图像文件时出错(不是 JPEG 文件:以0x89 0x50)" 并来自 PHP:'/var/www/myImage.jpeg' 不是有效的 JPEG 文件 ...
    • @bozhidarc 你肯定有另一个问题。 imagejpeg() 函数始终存储一个 JPEG 文件。您可能没有将其正确保存回您的数据库,或者将错误的二进制字符串发送到您的浏览器。 --- 用周围的代码更新你的问题以及你如何使用它。
    • 对不起,我的回答太晚了,你是完全正确的,问题出在我的代码中:)
    【解决方案2】:

    我认为您需要对每张图片执行以下操作:

    • 将 BLOB 图像数据写入文件
    • imagecreatefromgif()在gd中打开图片
    • 使用imagejpeg() 将映像写回磁盘
    • 从文件中读入图像数据并写回数据库

    一般而言,像这样将图像数据保存在数据库中是不好的做法。更好的解决方案是将图像存储在网络服务器磁盘上,但将文件位置存储到数据库中的图像中。例如,如果您这样做了,那么解决您解释的问题会容易得多!

    【讨论】:

    • 将图像保存在数据库中是不错的做法。它使备份、安全和移动事物变得更加容易。例如,将文件从开发服务器移动到生产服务器就像复制数据库一样简单。唯一的问题是当你有有限的数据库存储而不是文件存储时
    【解决方案3】:

    您只需要 imagecreatefromstring() 来读取数据和 imagejpeg() 以 jpeg 格式输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 2016-10-09
      • 2019-11-10
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多