Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php:在数据库中存储图像_Php_Mysql_Gd - Fatal编程技术网

php:在数据库中存储图像

php:在数据库中存储图像,php,mysql,gd,Php,Mysql,Gd,目前我正在使用gd转换上传到jpg中的图像 imagjpeg($data,NULL,85) 并将其存储在blob mysql字段中。问题是质量。是的,质量太差了。一个窗口的截图,里面有一些文字,变得非常巨大。(使用游戏截图时,质量尚可) 我应该使用GD以外的库吗? 我应该使用其他gd格式吗?(图片PNG?) 注:请注意:这不是重复的。。我不是问如何将img保存到db ps2。请注意,如果我要更改当前的格式/方法,我必须转换已经作为jpg存储在数据库中的5000-6000个图像 ps3。我对ima

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

imagjpeg($data,NULL,85)

并将其存储在blob mysql字段中。问题是质量。是的,质量太差了。一个窗口的截图,里面有一些文字,变得非常巨大。(使用游戏截图时,质量尚可)

我应该使用GD以外的库吗? 我应该使用其他gd格式吗?(图片PNG?)

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

ps2。请注意,如果我要更改当前的格式/方法,我必须转换已经作为jpg存储在数据库中的5000-6000个图像

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

ps4。我需要在数据库中存储图像,请留在主题中

谢谢大家

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

重新拟订问题 在执行
imagejpeg($resourceFromImageCreateFromString,NULL,85)之后,我将图像(大部分是软件截图,有时是游戏截图)保存在BLOB字段中

我遇到的问题是,上传的图片和原版图片相比看起来很糟糕,即使大小相同。(有时因为85而变得更大)

imagejpeg的实现很糟糕吗

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

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

再次感谢

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

如果它已经是jpeg,为什么还要重新编码?为了节省空间?好吧,但你已经有了你的答案,在某种程度上-为了节省空间从jpg到jpg,你必须节省在较低的质量

不能使用imagecopyresampled指定质量,使用imagejpeg可以指定质量。使用高(er)值作为质量参数


请注意,JPEG是一种为存储FOTOS而优化的格式。具有大面积相同颜色、直线等的图像最好以无损格式(如PNG)存储。当然,如果你的屏幕截图是以fotos作为桌面背景的,那么你就拥有了这两种元素——所以根据你的需要选择你的格式。如果foto部分更为重要,而您对字体和线条不太在意,请使用jpeg。当然,对于屏幕截图来说,JPEG的质量也可以和PNG一样好,但是如果你错过了它的大部分压缩功能,你必须使用90%以上的质量设置。在100%的情况下,JPEG也是无损的,但到那时PNG实际上可能更小(文件)大小。

您可以使用第三个参数将输出质量设置为。问题是,JPEG并不是包含大量文本的图像的最佳格式-您必须在降低图像质量和获得大量图像瑕疵之间进行选择,或者在提高图像质量和获得较大文件大小之间进行选择。您可以考虑使用PNG。

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

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

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


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

您是否监控了jpg的压缩质量集?默认值为75,是否尝试100?您使用imagecopyresampled的具体目的是什么?降低图像分辨率?拍摄一张1000x1000的图像,先将其重采样到100x100,然后再将其放大,这样不会再次显示原始图像。为什么不存储图像而不重新采样呢?抱歉,我不使用imagecopyresemlaed。我只在图像大于“x”值时才使用它来向下调整大小。大多数情况下不是这样,但图像仍然很差quality@yes123如果您在重新采样以规范化存储类型方面遇到了很多问题,为什么不添加一个具有图像类型的列,这样您就不必重新采样任何内容,除非它过大。标准JPEG永远不会无损,即使在100%的质量下。这一点很好,但在100%的质量下,你需要放大相当一点才能看到明显的退化,所以从所有实际目的来看。。。我们这里讲的是截图,不是医学x光图像:)如果我指定imagejpeg的质量为100,则图像会比原始jpg图像大。。这太愚蠢了,这就是我说的(或想说的),这就是为什么我指向PNG。事实上,看我的最后一句话。以较高的质量保存JPEG,就像最初保存的那样(甚至接近),当然是毫无意义的,因此我认为不需要提及它,只需选择一个(低得多的)质量就有意义了。