Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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
Java 为什么我从gif文件转换的jpg文件不是';又脆又清?_Java_Compression_Jpeg_Gif_Javax.imageio - Fatal编程技术网

Java 为什么我从gif文件转换的jpg文件不是';又脆又清?

Java 为什么我从gif文件转换的jpg文件不是';又脆又清?,java,compression,jpeg,gif,javax.imageio,Java,Compression,Jpeg,Gif,Javax.imageio,我使用下面的代码将gif文件转换为jpg文件,它可以工作,但结果jpg文件的质量与原始gif文件的质量不同,为什么?有什么办法提高质量吗 try { ImageIO.write(ImageIO.read(new File("C:/abc.gif")),"jpg",new File("C:/abc.jpg")); } catch (Exception e) { e.printStackTrace(); } 因此,从另一个角度问这个问题,使用上述方法,如何提高输出质量?JPEG保证一定程度的保

我使用下面的代码将gif文件转换为jpg文件,它可以工作,但结果jpg文件的质量与原始gif文件的质量不同,为什么?有什么办法提高质量吗

try
{
  ImageIO.write(ImageIO.read(new File("C:/abc.gif")),"jpg",new File("C:/abc.jpg"));
}
catch (Exception e) { e.printStackTrace(); }

因此,从另一个角度问这个问题,使用上述方法,如何提高输出质量?

JPEG保证一定程度的保真度损失;这就是它实现压缩的方式。您可以选择不同的块大小来最小化瑕疵,但是会有瑕疵

try
{
  ImageIO.write(ImageIO.read(new File("C:/abc.gif")),"jpg",new File("C:/abc.jpg"));
}
catch (Exception e) { e.printStackTrace(); }
GIF是无损的,JPEG是有损的;abc.jpg将永远不会是等同于abc.gif的像素。

是一种丢弃人眼无法很好注意到的信息的格式。但是,根据压缩图像时的图像质量设置,例如块状和污迹会变得可见,这就是图像看起来不清晰的原因

该方法可能以低于保持图像足够好所需的质量设置来保存JPEG

要将质量设置设置得更高,需要使用指定图像质量设置,然后使用输出JPEG

例如:

// Get a writer for JPEG.
ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
iw.setOutput(new FileImageOutputStream(outputFile));

// Set the compression quality to 0.9f.
ImageWriteParam iwParam = iw.getDefaultWriteParam();
iwParam.setCompressionQuality(0.9f);

// Write image
iw.write(null, new IIOImage(imageToWrite, null, null), iwParam);
感兴趣的方法:

也就是说,正如其他答案所提到的,JPEG不适合压缩文本和插图。如果目标是保持图像质量,但文件大小可能比使用JPEG压缩时更大,则使用这样的格式可以保持图像质量不变,而不会有任何损失。但是,在许多情况下,PNG文件的文件大小将大于JPEG。(但情况并非总是如此。)


一般的经验法则是,对于照片和其他真实图像,有损压缩格式(如JPEG)在文件大小与质量的权衡中效果良好,而无损压缩格式(如PNG)在插图和线条艺术中效果更好,有类似颜色的大区域,但梯度效果很小。

JPEG对于内部有文本的图像特别不好。一个很好的替代方法是.PNG。

大致来说,JPEG适合于本质上是照片的图像。如果图像包含大量颜色变化,具有自然主义元素,并且类似于真实环境,那么JPEG将提供良好的质量,没有可见的瑕疵

如果图像是绘制的,或包含单一颜色的大色带且不是照片,则使用PNG可以更好地压缩图像。这是一个无损格式,可以做32位彩色


现在你几乎不应该使用GIF格式的图像-这种格式只支持8位颜色,压缩性能相对较差。

JPEG标准中有无损部分,但没有人费心实现ist:)虽然GIF是无损的,但值得注意的是它是无损索引的颜色格式,因此,从Truecolor源保存时会丢失一些颜色信息。JPEG是一种有损的truecolor格式,因此索引图像被上转换为truecolor(质量没有提高),然后在JPEG/DCT意义上“平均化”(质量相应降低)。GIF标准还有一个有损部分。唉,事情并不是那么简单:)太好了,它的工作原理和我预期的差不多!但我注意到了一些有趣的事情,我读了一张png图像,并将压缩质量设置为1.0f,我认为输出会像原始图像一样,但相反,浅蓝色显示为深蓝色,因为这是一张股票图表,我不介意,我很高兴它能工作!谢谢你可以用下面的图表试试:@Frank:即使在压缩质量为1.0f的情况下,压缩也是有损的,因此输出的质量与原始的不一样。我在过去观察到颜色的变化,因此这可能是有损压缩的影响之一。另请参见: