Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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-压缩图像而不丢失质量_Java_Image_Compression - Fatal编程技术网

Java-压缩图像而不丢失质量

Java-压缩图像而不丢失质量,java,image,compression,Java,Image,Compression,我有一张2.1mb的jpeg图像。我试图尽可能多地压缩图像数据。可能低于1mb。目前我已经做了一些关于这个主题的研究,并编写了一些代码来尝试压缩数据。我偶然发现了这个答案: 基于此,我将一个图像文件转换为字节数组,然后将字节数组转换为其二进制等价物。然后我对二进制数据使用游程编码。但这会使尺寸变大 我已尝试将文件转换为png。但这大大增加了文件的大小;9mb 那么,在Java中,压缩和调整图像文件大小而不丢失质量的最佳方法是什么呢?JPEG是对原始源图像的有损图像压缩加载JPEG压缩图像时,其

我有一张2.1mb的jpeg图像。我试图尽可能多地压缩图像数据。可能低于1mb。目前我已经做了一些关于这个主题的研究,并编写了一些代码来尝试压缩数据。我偶然发现了这个答案:

基于此,我将一个图像文件转换为字节数组,然后将字节数组转换为其二进制等价物。然后我对二进制数据使用游程编码。但这会使尺寸变大

我已尝试将文件转换为png。但这大大增加了文件的大小;9mb

那么,在Java中,压缩和调整图像文件大小而不丢失质量的最佳方法是什么呢?

JPEG是对原始源图像的有损图像压缩加载JPEG压缩图像时,其大小(W x H)与原始图像相同,每像素数据(BPP)——尽管该信息已经是原始信息的损坏/量化。这意味着相同数量的数据表示的原始信息较少

尝试将无损压缩(PNG或手动RLE)应用于恢复的图像1将导致更大的文件大小,因为新的压缩将忠实地保留工件和现有信息丢失4。由于JPEG会引入额外的噪声,恢复的数据甚至会降低应用无损压缩技术的效率

从原始原始图像信息(raw、BMP、TIFF)开始,以获得最佳压缩/质量权衡;并根据需要应用图像压缩格式。这可能是选择无损格式(如PNG、WEBP),也可能是选择具有不同压缩设置的有损格式,如JPEG(其中有多个变体)。如果图像已经是一个有损JPEG,最好的解决方案(不减少图像/数据大小)可能就是不处理它

不同的压缩算法将根据图像内容获得不同的结果,包括有损格式的明显质量损失。例如,一个简单的RLE2压缩可以很好地处理许多大的相同颜色区域的图像,但JPEG可以更好地处理这些区域 照片3


1如果在字节流上应用一般压缩(例如DEFLATE、bzip2),该字节流已经表示压缩良好的数据,则可能会节省一定百分比的空间。然而,由于在这种情况下图像不是首先恢复的,因此与对加载的“完整数据”图像重新应用无损图像压缩不同

2在其他技巧中,PNG应用了几种RLE风格的算法,可能与手动实现一样好或更好。PNG特别适合于通常相对简单(与照片相比)的图标,并且在恢复时必须是像素完美的

3 JPEG能够很好地压缩照片的部分原因是,它有目的地抛出对人类视觉不太重要的信息,并将“足以让人类感知”的近似值应用于压缩块


4即使重新保存JPEG图像(修改后),也可能导致图像进一步退化;有一些关于“JPEG转码”的论文可能是一篇有趣的读物。

我已经在使用JPEG图像。答案是一个文件可以从5mb压缩到100kb以下。我更新了问题。当然,如果你从一种颜色的图像开始。。这个答案误导了你。它不是指一幅任意的5MB图像,而是指某幅恰巧经过精心处理的特定5MB图像——例如,它不是一张照片,但可能是皮埃特风格的盒子艺术。我怀疑PNG或WEBP对于相同的源图像也会有类似的表现。同样,如果在一般情况下可以做到这一点,那么就已经做到了;任何拥有专利的人都是亿万富翁。