php:在数据库中存储图像

时间:2011-02-28 16:37:27

标签: php mysql gd

目前我正在使用gd转换jpg上传的图像

imagjpeg($data,NULL,85)

并将其存储在blob mysql字段中。问题是质量。是的,质量很糟糕。内部有一些文字的窗口的屏幕截图变得相当丑陋。 (虽然游戏截图质量可以通过)

我应该使用除GD以外的其他库吗? 我应该使用其他gd格式吗? (imagepng?)

PS。请注意:这不是重复..我不是问如何将img保存到db

PS2。请注意,如果我应该更改我当前的格式/方法,我必须将已经存储为jpg的5000-6000图像转换为我的数据库

PS3。我使用85 for imagejpeg,不能使用更高的值,因为图像大小会比原始版本增长更多

PS4。我需要在db中存储图像,请保留主题

全部谢谢

================================

改革问题

我在执行imagejpeg($resourceFromImageCreateFromString,NULL,85);之后在BLOB字段中保存图像(主要是软件截图,有时是游戏截图)

我遇到的问题是,即使尺寸相同,上传的图像看起来也很糟糕。 (有时因为85而变得更大)

imagejpeg实现是否很糟糕?

PS。我的简单上传脚本执行以下调用:

upload file
open it with "rb" (binary)
pass the data to imagecreatefromstring
pass the result to imagejpeg

再次感谢

4 个答案:

答案 0 :(得分:1)

您是否有特殊原因希望将图像存储在BLOB中? 您传递给imagejpeg()的质量参数是什么?

答案 1 :(得分:1)

您可以使用第3个参数将输出的质量设置为imagejpeg()。问题是JPEG不是具有大量文本的图像的最佳格式 - 您必须在降低质量和在图像中获取大量工件,或提高质量和具有大文件大小之间进行选择。您可以考虑使用PNG。

答案 2 :(得分:0)

如果它已经是jpeg,你为什么要重新编码呢?为了节省空间?嗯,但是你已经有了答案,部分原因是为了节省从jpg到jpg的空间,你必须以较低的质量保存。

您无法使用imagecopyresampled指定质量,您可以使用imagejpeg。使用高(呃)值作为质量参数。

请注意,JPEG是为存储FOTOS而优化的格式。具有大面积相同颜色,直线等的图像可以更好地存储在像PNG这样的无损格式中。当然,如果您从带有桌面背景的照片的屏幕截取屏幕截图,那么您可以选择两者的元素 - 因此请根据您的需要选择格式。如果foto-part更重要,你不关心字体和行,那么请使用jpeg。当然,对于截图,JPEG也可以像PNG一样好,但是当你错过了它的大多数压缩功能时,你必须使用90 +%的质量设置。在100%JPEG也是无损的,但到那时PNG可能实际上是较小的(文件)大小。

答案 3 :(得分:0)

我的第一个建议是尝试将其保存为png,因为质量更好。

我的第二个建议是尝试imagejpeg($image, $filename, $quality)中的质量参数。

建议#3 - 我在一个我必须重写图像存储系统的网站上工作,因为它们实现了你正在做的事情,将图像作为BLOB存储在数据库中。他们的系统中只有大约20K的图像,并且每周都会崩溃,因为数据库无法处理负载。

无论图像有多大,5-6K图像的转换过程都不应超过几个小时。当我从db存储器将图像转换为磁盘存储时,我一次运行1K图像,每次运行需要5-10分钟。