如何使用 C# 保持从 URL 下载的 PNG 图像的透明度

本文关键字:下载 PNG 图像 透明度 URL 何使用 | 更新日期: 2023-09-27 18:36:27

我们正在开发从服务器下载图像的 C# 应用程序。截至目前,我们对 jpeg 图像工作正常,但具有透明度的 png 图像会添加白色补丁代替透明部分。我尝试了以下代码:

public Image DownloadImage(string _URL)
    {
        Image _tmpImage = null;
        try
        {
            // Open a connection
            System.Net.HttpWebRequest _HttpWebRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(_URL);
            _HttpWebRequest.AllowWriteStreamBuffering = true;
            // You can also specify additional header values like the user agent or the referer: (Optional)
            _HttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
            _HttpWebRequest.Referer = "http://www.google.com/";
            // set timeout for 20 seconds (Optional)
            _HttpWebRequest.Timeout = 40000;
            _HttpWebRequest.Accept = "image/png,image/*";
            // Request response:
            System.Net.WebResponse _WebResponse = _HttpWebRequest.GetResponse();
            // Open data stream:
            System.IO.Stream _WebStream = _WebResponse.GetResponseStream();
            // convert webstream to image
            _tmpImage = Image.FromStream(_WebStream);
            // Cleanup
            _WebResponse.Close();
            _WebResponse.Close();
        }
        catch (Exception _Exception)
        {
            // Error
            Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
            return null;
        }
        return _tmpImage;
    }

当我们从带有白色补丁的 URL 下载它时,我得到的图像。我想它添加了白色补丁代替透明部分,但我如何阻止它这样做。有什么方法可以直接检测并以正确的格式下载图像,而无需播放图像。

我试过这个_HttpWebRequest.Accept = "image/png,image/*"; 所以它应该接受 PNG 图像并保持纵横比,但它似乎对我不起作用。

任何帮助都深表感谢。

谢谢你,桑托什·乌帕德哈耶。

如何使用 C# 保持从 URL 下载的 PNG 图像的透明度

你用这些图像做什么?如果要将它们保存到文件或不想将它们转换为 Image 对象的内容,请从流中读取原始字节,并使用 FileStream 或 File.WriteAllBytes 将它们保存到文件中。

从 C# 程序下载图像或任何其他文件的最简单方法是使用 WebClient 类的 DownloadFile 方法。在下面的代码中,我们在本地计算机上为图像创建文件名和路径,然后创建 WebClient 类的实例,然后调用 DownloadFile 方法,将 URL 传递给图像,以及文件名和路径。

string fileName = string.Format("{0}{1}", tempDirectory, @"'strip.png");
WebClient myWebClient = new WebClient();
myWebClient.DownloadFile(imageUrl, fileName);