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 に答える