我正在制作一个自定义相机,拍摄文件并通过网络发送。然后对图像进行OCR。要通过网络发送它们,它们必须是小尺寸(小于100 Kb)。我首先缩小图像然后转换为灰度并压缩到JPG 100%。图像尺寸仍然超过100Kb。如果我降低JPG压缩百分比,那么质量非常糟糕。如何解决这个问题。这是代码:
//图像缩放
public static Bitmap decodeSampledBitmapFromResource(byte[] data,
int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(data, 0, data.length, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
return BitmapFactory.decodeByteArray(data, 0, data.length, options);
}
//图像灰度。使用renderscript
uchar grayscale = pixelIn.r * 0.299 + pixelIn.g * 0.587 + pixelIn.b * 0.114;
uchar4 pixelOut;
pixelOut.a = pixelIn.a;
pixelOut.r = grayscale;
pixelOut.g = grayscale;
pixelOut.b = grayscale;
return pixelOut;
// JPG压缩
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
答案 0 :(得分:2)
看看this文章,我相信你会得到你想要的东西。
答案 1 :(得分:0)
如果你使用Bitmap.CompressFormat.PNG,你有什么?如何缩小图像(根据文档总是减少2倍)
JPEG是全彩色的,因此转换为灰度最终没有帮助,GIF是8位索引或灰度,所以即使这样也值得一试。
答案 2 :(得分:0)
保持质量。压缩图像。使用ShortPixel。即使是10MB /图像。
答案 3 :(得分:0)
有三件事可以帮助减少图像尺寸: 在保持纵横比的同时缩小图像:
public static Bitmap decodeSampledBitmapFromResource(byte[] data,
int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(data, 0, data.length, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB565;
return BitmapFactory.decodeByteArray(data, 0, data.length, options);
}
删除Alpha通道,使用以下配置:
options.inPreferredConfig = Bitmap.Config.RGB565;
使用JPEG压缩压缩图像:
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
100没有压缩和 0为100%压缩
GrayScaling不会减小尺寸。