我正在从Android手机上传图片(JPEG)到服务器。我尝试了这两种方法 -
方法1:
int bytes=bitmap.getByteCount();
ByteBuffer byteBuffer=ByteBuffer.allocate(bytes);
bitmap.copyPixelsToBuffer(byteBuffer);
byte[] byteArray = byteBuffer.array();
outputStream.write(byteArray, 0, bytes-1);
方法2:
bitmap.compress(Bitmap.CompressFormat.JPEG,100,outputStream);
在method1中,我将位图转换为bytearray并将其写入流。在方法2中,我调用了压缩功能BUT,质量为100
(这意味着我没有丢失)。
我希望两者都给出相同的结果。但结果却截然不同。在服务器中发生了以下情况 -
方法1(服务器中上传的文件):
已将大小 3.8MB 的文件上载到服务器。上传的文件无法识别。不与任何图像查看器打开。
方法2(服务器中上传的文件)
已将 415KB 的JPEG文件上载到服务器。上传的文件为JPEG格式。
这两种方法有什么区别。即使我将压缩质量设为100,但尺寸有多大差异?另外,为什么方法1中的任何图像查看器都无法识别文件?
答案 0 :(得分:1)
我希望两者都给出相同的结果。
我不知道为什么。
这两种方法有什么区别。
第二种方法创建一个JPEG文件。第一个没有。第一个只是将形成解码图像的字节副本复制到提供的缓冲区。在任何特定的文件格式中都不会这样做,更不用说JPEG了。
即使我将压缩质量设为100,但尺寸差异如此之大?
因为第一种方法不适用压缩。对于JPEG质量而言,100并不意味着"未压缩"。
为什么方法1中的任何图像查看器都无法识别文件?
因为复制到缓冲区的字节没有以任何特定的文件格式写入,当然也不是JPEG。该缓冲区不是为了写入磁盘而设计的。相反,该缓冲区被设计为仅用于稍后重新创建位图(例如,用于通过IPC传递的位图)。