我有一个相机工具类,我可以从相机意图中拍摄图像,也可以调整拍摄的图像大小。
然而拍摄的图像大约为100K(调整大小后),如何在保持质量的同时将其缩小。质量只需要在屏幕上显示大小 - x,y最小320像素。
以下是类中的压缩方法:
/*
* quality Hint to the compressor, 0-100. 0 meaning compress for small size,
* 100 meaning compress for max quality. Some formats, like PNG which is
* lossless, will ignore the quality setting
*/
private boolean c( final String i_ImageFileName, final String i_OutputImageFileName )
{
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inJustDecodeBounds = true;
try
{
BitmapFactory.decodeStream( new FileInputStream( i_ImageFileName ),
null,
bitmapOptions );
}
catch( FileNotFoundException e )
{
Log.e( mTAG, "c()- decodeStream- file not found. " + e.getMessage() );
return false;
}
//Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE = 320;
int width_tmp = bitmapOptions.outWidth;
int height_tmp = bitmapOptions.outHeight;
int scale = 1;
while( true )
{
if( width_tmp < REQUIRED_SIZE ||
height_tmp < REQUIRED_SIZE )
{
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// Decode with inSampleSize
BitmapFactory.Options newBitmapOptions = new BitmapFactory.Options();
newBitmapOptions.inSampleSize=scale;
Bitmap newBitmap = null;
newBitmap = BitmapFactory.decodeFile( /*getImageFile*/(i_ImageFileName)/*.getPath()*/ , newBitmapOptions);
ByteArrayOutputStream os = new ByteArrayOutputStream();
newBitmap.compress( CompressFormat.PNG,
100,
os );
byte[] array = os.toByteArray();
try
{
FileOutputStream fos = new FileOutputStream(getImageFile( i_OutputImageFileName ));
fos.write(array);
}
catch( FileNotFoundException e )
{
Log.e(mTAG, "codec- FileOutputStream failed. " + e.getMessage() );
return false;
}
catch( IOException e )
{
Log.e(mTAG, "codec- FileOutputStream failed. " + e.getMessage() );
return false;
}
return true;
}
我认为我正在做什么“通过booK”。
答案 0 :(得分:1)
当然,尺寸和质量是你牺牲的两件事。您不能拥有最小的文件大小和最高的质量。你在这里要求的是最高质量的,而且你的尺寸太大了。所以,拒绝质量。
对于PNG,我不知道质量设置有什么作用(?)。这是一种无损格式。 (例如,设置为100甚至可能禁用压缩。)
这些是什么类型的图像?如果它们是线条艺术品,比如徽标(不是照片),那么如果压缩的PNG那么大,我会感到惊讶;那种图像数据压缩得很好。 (假设压缩已开启!)
对于照片,它不会很好地压缩。 320×320图像的100KB大约是每像素1个字节。这是PNG的8位颜色表,如果你达到那个文件大小,256色甚至不能提供很好的图像质量。
如果它们是照片,您肯定要使用JPG。这更合适。即使具有高质量设置,其有损编码也应该容易低于100KB。