繁体   English   中英

Android:从SD卡调整JPEG的大小而不会降低质量

[英]Android: Resize an JPEG from SD Card without losing quality

通常,我使用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及更高版本)示例的链接将非常好。

谢谢您的帮助,艰难!

您如何期望在不损失质量的情况下缩小图像?

无论如何,要正确缩小比例,您首先需要对图像进行模糊处理,最好使用高斯核,但是框模糊处理可能会很好。 内核大小应与希望缩放的比例相匹配。 之后,您可以使用任何插值技术按比例缩小图像。 Lanzcos双线性甚至最接近的邻居都足够好。 一种替代方法是使用某种区域采样,其中目标图像中的每个像素是源图像中像素区域的平均值。 另一种选择是使用某种超级采样

如果您不执行任何这些操作,最终将得到糟糕的图像。 但是,即使正确执行操作,也会失去质量。 因为按比例缩小的图像将比原始图像具有更少的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM