3

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

2 回答 2

5

质量的损失来自使用GetThumbnailImage. 它仅用于文档中描述的相当特定的场景。

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

于 2013-04-22T03:20:33.787 回答
3

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

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

于 2013-04-22T06:00:43.597 回答