天道酬勤

Base64 字符串转图片 问题整理汇总

前言

最近碰到了一些base64字符串转图片的开发任务,开始觉得没啥难度,但随着开发的进展还是发现有些东西需要记录下。

Base64 转二进制

这个在net有现有方法调用:

Convert.FromBase64String(str);

 但在这一步发现调用时就报错了:Additional information: Base-64 字符数组或字符串的长度无效。

 网上搜索下才发现要转换的Base64字符串应该为4的整数,如果不是的话要在字符串的末端加上‘=’将其补全为4的整数。

int mod4 = str.Length % 4;
if (mod4 > 0)
{
    str += new string('=', 4 - mod4);
}

 原生二进制数据转图片

现在通过Base64的转换我们有了图片的二进制数据,一开始就简单通过以下代码转换为图片:

Image image = Image.FromStream(new MemoryStream(byte));

 但可惜的是,这一步也报错了,这里大概就猜到应该是我们的二进制数据没有包含头部信息,这样就导致转换无法继续。

 所以最后的解决方案如下:

public Bitmap CopyDataToBitmap(int width,int height,byte[] data)
{
    //Here create the Bitmap to the know height, width and format
    Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);

    //Create a BitmapData and Lock all pixels to be written 
    BitmapData bmpData = bmp.LockBits(
                            new Rectangle(0, 0, bmp.Width, bmp.Height),
                            ImageLockMode.WriteOnly, bmp.PixelFormat);

    //Copy the data from the byte array into BitmapData.Scan0
    Marshal.Copy(data, 0, bmpData.Scan0, data.Length);


    //Unlock the pixels
    bmp.UnlockBits(bmpData);


    //Return the bitmap 
    return bmp;
}

 总结

以上就是base64字符串转图片碰到问题的汇总,这里记录下,并附带参考资料,有兴趣的同学可以参考下:

参考资料:

http://www.tek-tips.com/viewthread.cfm?qid=1264492

http://stackoverflow.com/questions/742236/how-to-create-a-bmp-file-from-byte-in-c-sharp

http://stackoverflow.com/questions/2925729/invalid-length-for-a-base-64-char-array

 

posted @ 2016-12-20 09:46  JulyLuo  阅读(3270)  评论(0编辑  收藏  举报