如何将jpeg转换为字节数组而不失去其质量

本文关键字:失去 数组 字节数 jpeg 转换 字节 | 更新日期: 2023-09-27 18:10:26

我在这里做的是使用ftp从终端复制一个图像文件到我的服务器。但是当我检查服务器上的图片时,它突然变成了质量差的图像。

我开始认为也许是因为我从图像到字节数组的转换。有人能帮忙吗?

这是我的代码…

Stream stream = FileUploadPic.FileContent;
System.Drawing.Image i = new Bitmap(stream);
var abort = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
var thumbnail = i.GetThumbnailImage(300, 300, abort, IntPtr.Zero);
byte[] bytes = imageToByteArray(thumbnail);
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(path);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
request.ContentLength = bytes.Length;
Stream req_Stream = request.GetRequestStream();
req_Stream.Write(bytes, 0, bytes.Length);
req_Stream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

imageToByteArray函数:

public byte[] imageToByteArray(System.Drawing.Image imageIn) { 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
    return ms.ToArray(); 
}

如何将jpeg转换为字节数组而不失去其质量

质量损失来自于使用GetThumbnailImage。它只打算在相当特定的场景中使用,在文档中描述。

这个答案描述了如何在c#中对图像输出的质量和特性进行更精细的控制。

System.Drawing.Imaging.ImageFormat.Gif是你的问题。GIF是一种相当老的格式,并且仅限于256色。

如果您想避免重新压缩Jpeg,我建议您尝试ImageFormat.Png,这是一种更现代的格式,并且仍然是无损的。