将og BMP实例转换为png
本文关键字:png 转换 实例 og BMP | 更新日期: 2023-09-27 17:58:37
我有一个函数名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")
但它不起作用。
所以,您做得非常错误。首先,如果将文件的扩展名更改为.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安装的php.ini
文件中找到;extension=php_gd2.dll
,并取消注释(从一开始删除;
),使其现在为extension=php_gd2.dll
,然后重新启动Apache。
在linux上,您需要执行sudo apt-get install php5-gd
,然后重新启动Apache。
- 您正在加载PNG到BMP文件格式
- 您正在通过GET发送文件
- 您在收到BMP时将BMP文件保存为JPG
因此:
- 不要像BMP那样以PNG打开。将PNG打开为PNG,因为它较小或大小相同。这里不需要BMP
- 张贴
- 仅仅因为你称它为JPG,并不能使它成为JPG。它目前是一个BMP,保存为JPG
如果它保存的是.jpg文件,那么它就是一个扩展名错误的.bmp文件。