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

C# 如何将jpeg转换为字节数组而不丢失其质量,c#,asp.net,C#,Asp.net,我在这里做的是使用ftp将图像文件从终端复制到服务器。但是当我在服务器上查看图片时,它突然变成了质量很差的图像 我开始想可能是因为我把图像转换成了字节数组。有人能帮忙吗 这是我的密码 Stream stream = FileUploadPic.FileContent; System.Drawing.Image i = new Bitmap(stream); var abort = new System.Drawing.Image.GetThumbnailImageAbort(Thumbnai

我在这里做的是使用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(); 
}

质量损失来自于使用
GetThumbnailImage
。它仅用于相当特定的场景


如何对c#中图像输出的质量和特性进行更精细的控制。

System.Drawing.Imaging.ImageFormat.Gif
是您的问题。GIF是一种相当古老的格式,限制为256色


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

谢谢您的回答。我已经测试了这部分代码。我已经尝试将缩略图保存到同一个终端,图像非常好。但每当我上传到服务器上。图像以某种方式变得像素化。除非你的
imageToByteArray
做了一些奇怪的事情,这不是因为你转换成了
byte[]
@Blorgbeard这里是我在imageToByteArraypublic byte[]imageToByteArray(System.Drawing.image imageIn){MemoryStream ms=new MemoryStream();imageIn.Save中的代码(ms,System.Drawing.Imaging.ImageFormat.Gif);返回ms.ToArray();}我已经将它编辑到您的问题中了-下次您应该这样做:)我想我找到了您的问题-检查我的答案!我没注意到…非常感谢你的回答…愿上帝保佑你D