使用ftp松散透明度上传png图像

时间:2014-05-17 11:27:28

标签: c# .net image upload ftp

在我的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();
}

提前致谢

1 个答案:

答案 0 :(得分: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();
}

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