C#/Java压缩JPG图像

本文关键字:JPG 图像 压缩 Java | 更新日期: 2023-09-27 18:26:16

我需要在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或服务器可以接受的等效内容?

C#/Java压缩JPG图像

借助于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对象