[MonoDevelop] Convert.ToBase64String yields different result than on windows...
Quandary
quandary82 at hailmail.net
Sat Jun 4 15:55:46 EDT 2011
Hmm, strange...
It turns out that when you have
----------------------------------------------------
<%@ Page Language="C#" %>
<script runat="server">
public void WriteImage()
{
// Write image to output stream
// Response.End()
}
</script><% WriteImage(); %>
----------------------------------------------------
You may not have a whitespace/tab/newline between </script> and <%
WriteImage %> ...
Apart from that, although base64 encoding returns a different string on
Windows and Linux,
the string created on Windows can be decoded and returns a valid image
on Linux too, although the base64 string is different for the same image...
Very strange.
I have not yet tested whether the string created on Linux will work on
Windows, but I suppose so.
On 06/04/2011 08:19 PM, Quandary wrote:
> Hi,
>
> Question on the below code (with mono 2.10.2):
> I'm converting an image to base64 string, and use this string to embed
> it on a webpage, there I write the image back in the ResponseStream.
>
> For that I use the below code, using
> Convert.ToBase64String on the image byte array.
>
> It seems it results in a different base64 string on Linux than on Windows.
> With PHP, it doesn't.
>
> To reproduce:
> Encode an image (i used gif format) on Windows to base64.
> Then put the resulting base64 string into a string on an asp.net
> website, and base64 decode that string there, writing the image to the
> output stream.
> It works fine on Windows.
> It works fine on Linux.
> But if you base64 encode the image on windows, and put the result string
> from windows into the decoding website on Linux, then you will get an
> invalid image..
>
> If you copy the base64 string generated on Windows to Linux into a PHP
> site, and base64 decode it there, it results in a perfectly fine image.
>
> I think this is a bug...
> And if it is, this should be put into a unit test.
> Because once base64 values are in a database, you can't just correct the
> encoding/decoding algorithms, because in the database there will still
> be values encoded by the old faulty algorithm (I do this in a reporting
> service solution, to get the logo image for each customer into the
> header)...
>
>
> Here the code:
> Note that you need to put a constant as value into variable str to cause
> the error.
>
> ------------------ Code running on Linux
> string strBase64Content = "base 64 converted image string here";
> byte[] bt64 = System.Convert.FromBase64String(strBase64Content);
> //string strMIME = GetImageMime(ref bt64);
>
>
> Response.ContentType = "image/gif"; //strMIME;
> Response.OutputStream.Write(bt64, 0, strBase64Content.Length);
> Response.End();
> --------------------------------------------
>
>
>
>
> void _Default_Load(object sender, EventArgs e)
> {
> string strPath = Server.MapPath("~/file.gif");
> System.Drawing.Image imgThisImage =
> System.Drawing.Image.FromFile(strPath);
>
> string str = ImageToBase64(imgThisImage,
> System.Drawing.Imaging.ImageFormat.Gif);
>
>
> Base64ToImage(str);
> Response.Write(str);
> // load event
> }
>
>
> public string ImageToBase64(System.Drawing.Image image,
> System.Drawing.Imaging.ImageFormat format)
> {
> using (System.IO.MemoryStream ms = new
> System.IO.MemoryStream())
> {
> // Convert Image to byte[]
> image.Save(ms, format);
> byte[] imageBytes = ms.ToArray();
>
> // Convert byte[] to Base64 String
> string base64String = Convert.ToBase64String(imageBytes);
> return base64String;
> }
> }
>
>
> public System.Drawing.Image Base64ToImage(string base64String)
> {
> // Convert Base64 String to byte[]
> byte[] imageBytes = Convert.FromBase64String(base64String);
> System.IO.MemoryStream ms = new
> System.IO.MemoryStream(imageBytes, 0, imageBytes.Length);
>
> // Convert byte[] to Image
> ms.Write(imageBytes, 0, imageBytes.Length);
> System.Drawing.Image image =
> System.Drawing.Image.FromStream(ms, true);
> return image;
> }
>
> _______________________________________________
> Monodevelop-list mailing list
> Monodevelop-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/monodevelop-list
More information about the Monodevelop-list
mailing list