【问题标题】:Size prediction of a scaled down image缩小图像的尺寸预测
【发布时间】:2017-05-26 03:25:42
【问题描述】:

我有一个 2550x3300 大小的 JPEG 文件(这个文件是用质量等级 90 创建的)。文件的物理大小为 2.5 MB。我想将此图像缩小到 1288x1864(原始尺寸的 50%)并以相同的质量 90 保存。但我想提前知道下采样图像的物理尺寸,甚至在实际缩小之前。

感谢任何帮助!

这是我正在使用的代码,

`
//Decodes the existing file to bitmap
Bitmap srcBP = BitmapFactory.decodeFile(filePath, options);
//Calculates required width and height
int reqWidth = options.outWidth * .50;
int reqHeight = options.outHeight * .50;
//Creates scaled image
Bitmap outBP = Bitmap.createScaledBitmap(srcBP, reqWidth, reqHeight, false);
//Save modified as JPEG
File tempFile = new File(imageOutPath);
FileOutputStream out = new FileOutputStream(tempFile);
outBP.compress(Bitmap.CompressFormat.JPEG, compression, out);
out.close();
`

【问题讨论】:

    标签: java android image imaging


    【解决方案1】:

    很难预测压缩后的图像大小,因为压缩取决于图像的实际内容,有些图像压缩到比其他图像更小的尺寸,即使它们具有相同的尺寸。我建议的方法是尝试像字节数组一样压缩内存中的图像,然后获取该数组的大小,这将是文件的大小给或取几个字节。此代码取自另一个答案,并根据您的需要进行了一些修改: Java BufferedImage JPG compression without writing to file

    ByteArrayOutputStream compressed = new ByteArrayOutputStream();
    ImageOutputStream outputStream = 
    ImageIO.createImageOutputStream(compressed);
    ImageWriter jpgWriter = 
    ImageIO.getImageWritersByFormatName("jpg").next();
    ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
    jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    jpgWriteParam.setCompressionQuality(0.9f);
    jpgWriter.setOutput(outputStream);
    int reqWidth = options.outWidth * .50;
    int reqHeight = options.outHeight * .50;
    BufferedImage img = new BufferedImage(reqWidth , reqHeight, BufferedImage.TYPE_INT_ARGB);;
    try {
        img = ImageIO.read(new File(filepath));
    } catch (IOException e) {
    }
    
    jpgWriter.write(null, new IIOImage(img, null, null), jpgWriteParam);
    jpgWriter.dispose();
    byte[] jpegData = compressed.toByteArray()
    

    现在 jpegData.size() 将非常接近图像的字节大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2013-02-10
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多