【问题标题】:Upload png Image with ftp loose transparency上传具有 ftp 松散透明度的 png 图像
【发布时间】:2014-07-05 19:42:30
【问题描述】:

在我的 c# 应用程序中,我正在尝试使用 ftp 上传 png 图像,问题是我失去了透明度(透明区域变成黑色!)。

PS : 我发送的图像存储在 Sql Server 数据库中,它们在我的应用程序中看起来很好。这是我使用的代码:

private const int defultbuffersize = 1024 * 60;

public void UploadImage(Image image, string uri, string filename)
{
    var request = WebRequest.Create(String.Format(@"{0}/{1}", uri, filename)) as FtpWebRequest;

    if (request == null)
        return;

    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.Credentials = new NetworkCredential("userName", "password");
    request.UsePassive = true;
    request.UseBinary = true;
    request.KeepAlive = true;

    using (var writer = request.GetRequestStream())
    {
        var bytesData = image.ToByteArray();
        var position = 0;

        while (position < bytesData.Length)
        {
            var buffer = readData(bytesData, position);
            writer.Write(buffer, 0, buffer.Length);
            position += buffer.Length;
        }
    }
}

private static byte[] readData(byte[] bytesData, int position)
{
    var buffer = new byte[defultbuffersize];
    var lenght = position + defultbuffersize > bytesData.Length ?
        bytesData.Length - position : defultbuffersize;

    Array.Copy(bytesData.ToArray(), position, buffer, 0, lenght);
    return buffer;
}

其他类中的扩展方法

public static byte[] ToByteArray(this Image image)
{
    var stream = new MemoryStream();
    image.Save(stream, ImageFormat.Jpeg);
    return stream.ToArray();
}

提前致谢

【问题讨论】:

  • 如果文件是逐字节复制,则问题不在FTP代码中。

标签: c# .net image upload ftp


【解决方案1】:

你失去透明度的原因在于你的扩展方法

public static byte[] ToByteArray(this Image image)
{
    var stream = new MemoryStream();
    image.Save(stream, ImageFormat.Jpeg);
    return stream.ToArray();
}

您正在尝试使用 jpeg 格式序列化 png 图像

把扩展方法改成这个。

public static byte[] ToByteArray(this Image image)
{
    var stream = new MemoryStream();
    image.Save(stream, ImageFormat.Png);
    return stream.ToArray();
}

这应该可以解决您的透明度问题。

【讨论】:

  • 谢谢你的回答,很有帮助。
  • 似乎这被误认为是评论,因为它在原始状态下有多短。我已取消删除您的答案。
猜你喜欢
  • 2010-12-22
  • 2010-09-07
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
相关资源
最近更新 更多