java - C#/Java 压缩 JPG 图像

标签 java c# image bitmap compression

我需要在 C# 中复制这段代码,但我还没有找到一个好的方法。

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;

Bitmap d;
this.d.compress(Bitmap.CompressFormat.JPEG, 70, localByteArrayOutputStream);
Byte[] image = localByteArrayOutputStream.toByteArray();

我正在将自己的图像发送到服务器,它需要采用与此 Java 代码相同的格式。 这在 C# 中怎么可能呢?是否有 android.graphics.bitmap.compressFormat 或服务器可以接受的等效内容?

最佳答案

借助 System.DrawingSystem.Drawing.Imaging 命名空间中的几个类,在 .Net Framework 中实现这一点非常容易。您甚至不需要处理诸如字节数组之类的低级内容...这是一个示例,它采用输入文件路径并将结果输出到不同的文件...

        string inputFile = @"in.jpg";
        string outputFile = @"out.jpg";

        Bitmap inputPhoto = new Bitmap(inputFile);
        ImageCodecInfo decoder = null;

        ImageCodecInfo[] decoders = ImageCodecInfo.GetImageDecoders();
        foreach (ImageCodecInfo c in decoders)
        {
            if (c.FormatID == ImageFormat.Jpeg.Guid)
            {
                decoder = c;
                break;
            }
        }

        System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;

        EncoderParameters encoderParams = new EncoderParameters(1);
        EncoderParameter qualityParam = new EncoderParameter(encoder, 70L);

        encoderParams.Param[0] = qualityParam;
        inputPhoto.Save(outputFile, decoder, encoderParams);

这正是您想要的,但是,如果您无权访问文件系统,您始终可以将字节数组放入 MemoryStream 对象中,并使用 的不同重载>Bitmap 类的构造函数接受 Stream 对象

关于java - C#/Java 压缩 JPG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331853/

相关文章:

java - 从子类获取父类

c# - 使用 linq,我如何从另一个 IEnumerable<> 的属性创建一个 IEnumerable<>

c# - PostgreSQL:函数返回多个记录集:如何在 C# 中读取?

python - 如何使用 OpenCV 获得金属光泽物体的轮廓

java - 在使用 XSL-FO 和数据 URI 方案以 PDF 格式显示图像方面需要帮助

java - 如何从我生成的数据中获取标准差

java - 自动缩放的 Android 2x2 行图像

java - Docker Java 应用程序 - SSLHandshakeException/未找到可信证书

c# - 线程中的定时器问题

javascript - 来自不同域区域的内容安全策略和 Google Analytics 图像