通常我会使用StackO的搜索功能找到所需的一切。但是现在(成功更少)我真的很努力地从SD卡调整JPEG大小而不会降低质量。如下所示,您可以看到原始图像干净且完全可读。调整大小后,我总会得到模糊的结果。
原文:https://www.dropbox.com/s/l5h4cdkz29vkapw/signature.jpg?dl=0
缩放:https://www.dropbox.com/s/tobijbu5hisf9rz/signature_small.jpg?dl=0
在下面的代码段落中,您可以看到我尝试过的所有内容都没有成功(我希望我错了,但我认为这段文章包含了StackO的所有可用答案。):
public void saveSignature(View view) throws IOException {
image = signature.getImage();
File sd = Environment.getExternalStorageDirectory();
File final_location = new File(sd, "signature.jpg");
try {
if (sd.canWrite()) {
final_location.createNewFile();
OutputStream os = new FileOutputStream(final_location);
image.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
//Bitmap resized = Bitmap.createScaledBitmap(image,(int)(image.getWidth()*0.4),(int)(image.getHeight()*0.4), false);
//Bitmap resized = Bitmap.createScaledBitmap(image, 300,75, false);
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
// "works but Color ist gray from sampling" bmOptions.inSampleSize = 5;
final_location = new File(sd, "signature_small.jpg");
final_location.createNewFile();
os = new FileOutputStream(final_location);
Bitmap b= BitmapFactory.decodeFile(sd +"/signature.jpg",bmOptions);
Bitmap out = Bitmap.createScaledBitmap(b, 349, 86, true); //also tyed false (without any Change)
out.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
获得Android(4.0及更高版本)样本的答案或链接会很不错。
感谢您的帮助, 强硬!!
答案 0 :(得分:0)
您如何在不降低质量的情况下缩小图像尺寸?
无论如何,为了正确缩小你需要首先模糊图像,最好使用Gaussian内核,但是盒子模糊可能会很好。内核大小应与您希望缩放的比例相匹配。之后,您可以使用任何插值技术缩小图像。 Lanzcos,bilinear甚至nearest neighbor都足够好了。另一种方法是使用某种区域采样,其中目标图像中的每个像素是源图像中像素区域的平均值。另一种方法是使用某种supersampling。
如果你不做任何这些,你最终会得到糟糕的图像。但即使你做得正确,你也会失去品质。因为按比例缩小的图像将比原始图像具有更少的信息。