将BMP实例转换为png

时间:2014-04-16 08:00:11

标签: c# php bmp

我有函数名称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")

但它不起作用。

2 个答案:

答案 0 :(得分:2)

所以,你做错了。首先,如果您将文件的扩展名更改为.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 Support设置为Enable,则在打开文件时,您已启用gdlib。如果您没有看到,请执行以下操作:

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

在Linux上,您需要执行sudo apt-get install php5-gd,然后重新启动Apache。

答案 1 :(得分:1)

  1. 您正在将PNG加载为BMP文件格式
  2. 您正在通过GET发送文件
  3. 您将BMP文件保存为JPG te minute,您收到BMP
  4. 所以:

    1. 不要像BMP一样以PNG打开。将PNG打开为PNG,因为它的尺寸较小或相同。这里没有BMP ......
    2. 发布它
    3. 仅仅因为你称它为JPG,不会使它成为JPG。它目前是BMP,保存为JPG。
    4. 如果它甚至保存了.jpg文件,则它是扩展名错误的.bmp文件。