2017-05-26 13 views
0

サイズが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(); 
` 

答えて

0

は、圧縮画像の実際のコンテンツに依存しているため、一部の画像がさらに他のものより小さいサイズに圧縮した圧縮後の画像の大きさを予測することは困難です彼らは同じ次元を持っています。私が示唆しているアプローチは、バイト配列のようにメモリ内のイメージを圧縮してから、この配列のサイズを取得し、それがファイルのサイズになるか、または数バイトを取ることです。別の答えから撮影し、あなたのニーズに少し変更され、このコード: 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は()バイト単位でイメージのサイズに非常に近くなります。

関連する問題