将 BMP 实例转换为 png

Posted

技术标签:

【中文标题】将 BMP 实例转换为 png【英文标题】:Conversion og BMP instance to png 【发布时间】:2014-04-16 08:00:10 【问题描述】:

我的函数名 uploadLayerIcons 如下:

    private void uploadLayerIcon(string LayerName)
    
        Bitmap icon= new Bitmap(@"C:\Users\HP\Desktop\911\Prism\Prism_Resources\m.png");        

        System.IO.MemoryStream stream = new System.IO.MemoryStream();
        icon.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] imageBytes = stream.ToArray();
        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);

        HttpWebRequest m_ObjRequest; //Request which needed to be sent to server
        HttpWebResponse m_ObjResponse; // Response which is sent back from the server to the client

        StreamReader reader = null; // making a stream reader to read the web pageand initialize it to null


        string m_Url = "http://192.168.1.30/muneem/erp/uploadIcon.php" + "?bitmap=" + base64String + "&layerName=" + LayerName; // the url of that web page

        string m_Response = "";
        m_ObjRequest = (HttpWebRequest)WebRequest.Create(m_Url); // creating the url and setting the values
        m_ObjRequest.Method = "GET";
        m_ObjRequest.ContentType = "application/json; charset=utf-8";
        //m_ObjRequest.ContentLength = 500;
        m_ObjRequest.KeepAlive = false;

        m_ObjResponse = (HttpWebResponse)m_ObjRequest.GetResponse(); // getting response from the server
        using (reader = new StreamReader(m_ObjResponse.GetResponseStream())) // using stream reader to read the web page
        
            m_Response = reader.ReadToEnd();
            reader.Close(); // Close the StreamReader
        

        m_ObjResponse.Close();
        m_ObjRequest = null;
        m_ObjResponse = null;


    

UploadIcon.php 文件如下:

<?php
 $bitmap=$_GET['bitmap'];
 $name=$_GET['layerName'];

$data = base64_decode($bitmap);

$filepath="app/uams/uploadedImages/".$name.".jpg";
 file_put_contents($filepath,$data);


?>

它没有正确转换我发送到服务器的相同图像。

我在互联网上搜索了很多东西,但都是徒劳的。这个东西我也试过了

 Bitmap icon= new Bitmap(@"C:\Users\HP\Desktop\911\Prism\Prism_Resources\m.png");
 icon.save("Path of srrver")

但它不起作用。

【问题讨论】:

您正在将 png 转换为 bmp,然后将其传输并直接保存为 jpg? 是的,但我正在将 bmp 字符串发送到服务器并将 bmp 字符串保存到服务器中的 jpeg/png 嗯,不,您正在保存带有 .jpg 扩展名的位图数据。更改扩展名不会自动将图像转换为 .jpg 格式。我建议您将 png 数据发送到 php,然后在 php 中执行$im = imagecreatefromstring(base64_decode($_GET['bitmap']));imagejpeg($im,$filepath) 之类的操作。我会写在答案中。 【参考方案1】:

所以,你做错了。首先,如果您将文件的扩展名更改为.jpg,它不会自动变为jpg 图像。

所以,我建议你发送原始的png 数据而不是位图,然后在 php 中使用类似这样的东西:

<?
  $imagedata = $_POST["data"];
  $im = imagecreatefromstring($imagedata);
  $filepath="app/uams/uploadedImages/image.jpg";
  imagejpeg($im,$filepath);
?>

另外,正如@DoXicK 在之前的回答中所指出的,不要通过GET 方法发送文件,你应该发布它,这就是这个例子的基础。

PHP 的函数imagecreatefromstring 识别图像类型,并相应地创建gdlib 对象(但它不适用于位图)。这就是为什么我建议您使用原始png 数据而不是将其转换为位图。此外,位图数据对于传输来说是不必要的。

要让imagecreatefromstring 工作,您需要安装并启用 GD 库。要查看它是否已启用,请创建一个空文件(例如命名为 info.php)并在其中仅放置

<?
  phpinfo();
?>

如果您在页面上看到 GD 支持设置为启用,则当您打开文件时,您已启用 gdlib。如果看不到,请执行以下操作:

在 Windows 上,在您的 php 安装文件的 php.ini 文件中找到 ;extension=php_gd2.dll,并取消注释(从开头删除 ;),现在它是 extension=php_gd2.dll,然后重新启动 Apache。

在 linux 上你需要做 sudo apt-get install php5-gd 然后重启 Apache。

【讨论】:

感谢您的回答,请告诉我一件事,您能告诉我如何将 rawpng/ico 数据发送到服务器吗? 好吧,只是不要将文件读取为位图,读取原始文件数据,然后将其发布到服务器。 什么意思,比如什么? System.Convert.ToBase64String(System.IO.File.ReadAllBytes(filePath)); 请确保您在 php 中执行 base64_decode,例如 $imagedata = base64_decode($_POST['data']);【参考方案2】:
    您正在加载 PNG 到 BMP 文件格式 您正在通过 GET 发送文件 您将在收到 BMP 的那一刻将 BMP 文件保存为 JPG

所以:

    不要以 PNG 格式打开为 BMP。以 PNG 格式打开 PNG,因为它要么更小,要么大小相同。这里不需要 BMP... 发布它 仅仅因为你称它为 JPG,并不能使它成为 JPG。它目前是 BMP,保存为 JPG。

如果它甚至保存一个 .jpg 文件,它就是一个扩展名错误的 .bmp 文件。

【讨论】:

先生,将图像上传到服务器的最佳方式是什么? codeproject.com/Tips/322464/… 向您展示了如何轻松做到这一点 :-) 将 c# 作为 PHP 端。 还有什么方法可以转换位图实例,因为我的客户问这个他说他会给我桌面应用程序中的位图实例,我必须从该实例创建 png 图像到服务器 这已经完成了无数次,并且很容易在谷歌上找到。 “PHP bmp to png”或“C# bmp to png”。 "C# 上传文件到 php"

以上是关于将 BMP 实例转换为 png的主要内容,如果未能解决你的问题,请参考以下文章

将多个 png 转换为 bmp 从标准输入到标准输出

将 Png 转换为 Bmp 和位图数组

iOS:将 png 图像转换为 1 位 bmp 图像

将位图 (bmp) 转换为具有透明度的 png (Windows c++)

如何在 C++ 中将图像从 .bmp 转换为 .png

bmp格式转换PNG格式 c语言或c++编程