将base64字符串转换为图像时出错(内部说明)

时间:2013-10-10 14:52:11

标签: c# asp.net

我有一项任务是在asp.net c#中将base64字符串转换为图像,我正在使用以下代码,

private static bool SaveImage(string path, string link, string name)
{
    bool result = true;
    if (link.StartsWith("data:image/jpeg;base64,"))
    {
        try
        {
            string intImg = path + "/" + name + ".jpg";
            System.Drawing.Image bmpFromString = Base64StringToBitmap(link.Replace("data:image/jpeg;base64,",""));
            bmpFromString.Save(intImg, ImageFormat.Jpeg);
            result = true;
        }
        catch (Exception)
        {
            result = false;
        }
    }
    return result;
}

public static System.Drawing.Image Base64StringToBitmap(string base64String)
{
    System.Drawing.Image bmpReturn = null;
    //string converted = base64String.Replace('-', '+');
    //converted = converted.Replace('_', '/');
    byte[] byteBuffer = Convert.FromBase64String(base64String);
    using (MemoryStream memoryStream = new MemoryStream(byteBuffer))
    {
        //finalImage = System.Drawing.Image.FromStream(ms);
        memoryStream.Position = 0;
        bmpReturn = System.Drawing.Image.FromStream(memoryStream);
        memoryStream.Close();
        byteBuffer = null;
    }
    return bmpReturn;
}

这是base64字符串

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAGQAZAMBIgACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAAEAAMFBgcBAv/EADsQAAIBAwMBBQYCCQMFAAAAAAECAwAEEQUSITEGEyJBUQcUYXGBkaHRFSMyQoKxwfDxUmKiJTOSsuH/xAAaAQACAwEBAAAAAAAAAAAAAAAEBQECAwYA/8QAKhEAAgICAQMCBgIDAAAAAAAAAAECAwQREhMhMQVRIjIzQXGBkdEUNEL/2gAMAwEAAhEDEQA/ANI4qr6p7Q+zmm3DW8l1LLIhw3cwllH16H6Zp32g3U9n2XuDayd3JLJHDuzjAZgD+VRWndlOyfdbb2yW4nCZeSXc2SBz8PtXMYWJC2POfgZS2/lLfo+rWGtWS3emXKXEJ4yvVT6EdQeRwaPqg9mNNt+z3axbXSFmSwv7dzLC+7CSJggjdzyCav1D5VKps4rwSm/DG7hzFbyyDGUQsM9OBmoi01tnjhN7AY2nKiIqOG3KvJB5wGOM1LXI327qIkm3DHducK3wNQDanprySRXmmwbrTKxABX27d5IHHhA7s1bHipRe47M5vT8j0XaKNLSOS7hl39yskhiUbeY95xls9Aft8qL/AE1bmTZHDcSZl7pGVOHYbsgEkdNp/Co5r7s+yOi2ULFd67O4G07AUPPphWHyHTFEQ3ujNeIkdsnvDTeErEMlwSu7P0bnr18q2lVHzwZTb9z2mryCye7mjTu4rieOQICTtjLjcOf9v4jrXZdcVJUEdu7AkKVOAwbve7POcYHNNW11YXdxNA+nKXneReI96zBG2uSceoXr6j0NSd3pltAEkaxtXDnLgICxGS3Axyd2PvmrKlP/AIZ7b9yOuO0EXuu+0jkaRl3xCSMhXTKDf1HHjX4/Dg16/TZinue/gIt4XkQyqD+6QAOeDnJ8/L403ePpdrIkdzp1usO0zAlBlc4z4ccHI/D6V2S+0dopIDbGRHmJKdySC+QCxJ46nr9Kjpw12gydv3Cxq8Du6xQ3UoQgFo4SRyAf5EUqH07UdKWAlCLVmILx7mHO0Y+fGOa5VHUk9cGe5P3F2m05tR0iRIiRNEwljwerLziq9Bqc91BDPBbwMZFId0i3bv8AkDn0oS47W3+m6LDtWOaZIYg/e53lsDfls84ORnBp9ezUsthFqvZa7mfT7sbjAshV4z5rgHnByD6Yo7EotqrfLwbRtjy4kvoEEMuqtPBbxwR2yFf1WMM7YJH2FWeqfayS6bbTafaStPqdnmZ4FLNuLJkcA+IZP3BNEm71qSVT3EyFZghZYWAaMXO3dg8cxAN68/YPIosss5N6IlYm+wf2n7Q2vZ2zSa58UkrbYo8/tH1+Q/Kq2vbDXe4W+HZ73mxYbt1tuYnjkg+f2+tUrtrqF9rnayC0vITGLVUWWEIT3QJDPnPXqvPQ8VoAv7+K3kijl05IFhPcAzEE4Hh3DHh9Mf4ourDrrgua22erXU2yb06807XbG11K2QSRsMpu4KEHkEeoI+4ouS3hkkjkkiRmjOUOOh4/IfaqD2Mu9Sin1OyjePbFqUbstvGZAFkAZiD/AKfp5nmrnpVxczWXe3/dq4JU7RhTtOCw5PBIJHPTFB30yqb0+39me++mPalfLYrCcou8lRk45xQx1W7aKf8A6fM2zAG5xlvXH3qB7XdpbOFIo7dPeDFJueQAFVGCDj1+lMi4jvFhmGq91HtyFaQjj/bhhn6g0wxYyjSuS0b1KMvyXKynaaEPNHtc+TYJ/vNdt7W1i3iOFBvJLHGSSevX5VUTrttJbWdva3rrMt0Vm3SvHhcOPEwHPO2jTd6mJorV47p1hkgHvMdvIO9wxDk4yCpGD6c0FPHm5N71sxnJKTJHVdUh0u4WAWgO5N/hAHmR/Su1CvLqmoCOe506UOYozj3aZNpKKxXGD0ZiPpSrWvHSiuXn8k7Rnsl2lxCRnqDx61cvY9qsZu5dGufERm4tSSfCejgfMYOPgayq1nKs6BsqWyD0qQ0bVm0fWrTUlJAt5RI2PNf3h9RkfWnritaA+TfcvftdsksNd0y7tB3TtbEAocYKuTkfHx13sj2s1bULpLAkXEqK0ilsAuoUja3IzyVPkeOTXv21Tq1/pewhh7vI4I6EMwx/Kuex3T4nhuNSlRWcuUXJzgD4eXn96EyIQnSuS2zSpNyaTITtD2dv7n2ks9xughutsqScqJCsShlX6g/ajNU1IaPY3MN/YJO4AAkUhS/pnIP51qV7b29+0K3Mas0MgkiYjlWHQ/DzoDU9AsL8ObqBGyuDkdaV/wCdBajPs49g+n4E192UvsIuo2Why3/ucANw0k0km4EYGMDG4Yx4h/D8shyatPqceJZHWBSe7g27VQZ6YHp0q1aza22hdn7r3aJUR4ypC8A5wM49aocp7hWkjwyOgPTzHn9sfajcFxucreP3BLk49thU6ZjPFTvY/TbHUiLV0KyxMZBhsCVMdCOnB6/Aj0NVyzvBNEsikYYDg0Tp9++najBdW55ifcF+PmvyIzTCyPKLRhCTi9ole3WkGy1dpgFC3UQmG3puxhgPqAf4qG7F6xqQmmsLdfeFjQyxo7DgAEYySON2zp6/Orj21WLU+zNrqVthljkV1PX9W4wR/wCW3PyrHbi/ksby6hhJU3ELQFgcYDFSf5EfWsZVq6rTRPLTNDv/AGgxWd01u72u6PAYojSAnz5U4+mTSrPI5rOwgiW60/3mWVBKTnGwHoOvoAf4q5VV6ZRr5SvWkQEwkjmLNyG6PjAanA25OvlXlDC2Fl38n9pRnj4UmAUnbnZ+7mjCpL69rsmrQ6d3zNvtLJLZs+ewtz9QR9q0j2PRonZVJVPjlnkZufRio/AVjB53rty56HNa37H5P+jyWgfxQysNvwPOfxNY3L4OxvjP4zQozuunIboBx96ImkRV8Wc+lQNyLv3uQ25YhcAqFHJ+ZPx9K9LBey8vK8B9GAI+4Ncdl/WkNeknp7Au3rK/ZefjG1k6+m4VnwffYqNsrEcfq0B/xVn7ce8izazM/fHZ3rgeQB/+GqjHLts3YjcMZ2kDB+9dF6Omsfv7i/MioyWgOwk/VlemGYdfiaL35Vtx86iLHe8rsZXyXPhHQVI4bB/OmwHsvvY3UxqOgatoUzZlW3eWAfTJA/iwfqay3VnD6pDjqQSfu1SUep3elXEd3ZSBJ48hWbphhg5+hqtp3k18niBbaeQenlVYx02ebJdC8oDFlGAFGR5AAD7AY+lKvPiQBQBgDy8qVa7KaK/FcNCdjglfxHyoxQJVzHuYnp+WKauYlZSPP1rzpV7JpepQ3W+RDEdwaNVJB9RuBAPxwazZZF60T2bX1zC91qF3HaMP2Ydu9hxnxdAD8Oab0Nbrs72gvGa52RW4i7zuvF3pc+Egem3cTnBGKL0/te8sAKyQJbLwsAZtzH1JPUk8ljT3YG0TUu0et3VwyyKBHH0IG7BBBB8xjH3xQF+Q665yl9hhGiKlFxZpunX0d7CJo2HjAOV6N8aIkRz0cY+VU24t7rspM13Z5m05jmWLPMfxHqKs1tqNte2Ud1aSo6OMgBuaR5VMciHWq/YWk0xm5sY5pJt67t9uUJI6/wB5rJLU5tWRsFhlSfTHH9K1lrl2eWRcbIkbcCcEn0H9+YrH7CeO5FxJG26IzSFD0ypY4NNvSOXQSYJmrWiPtzIJn24XDZzgbjRjM+MFiTjNCSJJ7y/dsxY/ugAgfHNPNujjPeSF2xjkAfypsLwe4PeNgnPFBWIxdO2VyFx145/xRa9WJ8hUdYNv71h8P5V5HmHvMQx5rtMY9RSqxAE9xG3SRfvTMrofMGuGNE4GDTckgAwAM1Qk8I7KCodlU8kDzrYfY1CP0JcTjrJcNn44AH51jgOa2z2Prt7LKcdZXP8AyP5Us9WesV/lBeJ3t/Rd7qNJ4WRwGBGMGs1vobjsvqErwq7WknIVTwp+VaS5ySPKofWbKO7hKsBnyNc3i5DonteBxFdtMpuodotTvLJksFAZ03K279psdOvT+oJ44xTOx8ostcSHUI2eJAQYH4G7IHIPHn51ebux9yjznndgVnWuFo9dnlQ4IkDA/wAK10mHkdbaS0hfmRUZRkXrtjqMFzaWrW1uYdsu3gKOCpOMDp0/lVVd9wqPN7PKipKwAjHHGc/j/eaF/Sko47pPqTTCtOMdMCukpz2iXVS47tThn8IPxPFRlrFLZyyRTjbztDHgEgdM/Ig09pd7JcajAjhUXJOEB5ODT3aCaOWzjMR6yhzxjOVOD+FVdklYo67FVBODewaSaTd4FJHqKVQ+cUq3MdhJNeFjDrKTnwx7h8812lVS4yv7Nbl7KAB2Rgx/rf8A9jSpUq9Y/wBf9oLwvqFvfzoC4J2/WlSrlV5HCKt2xUPp4U/6g3HqDms11OJV1CaPJYdcnrzXKVdP6T9P+RZnfMBL/wBon5igW/bNKlTgAJbs7GrXLMeqbSD88

错误消息是,

Error Message The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "

我无法理解这种方法有什么问题,如果我错了,有人会纠正我。

2 个答案:

答案 0 :(得分:2)

您拥有的base64字符串长度不正确。 Base64字符串应该是四个字符的块,但是你有4657个字符,或1164.25个块。

结论:您错误地将字符串中的最后8加倍。删除它,你会得到一个黄色背景上有三个人的图像,底部有一个小灰色边框。

答案 1 :(得分:0)

您可以使用:

 user.Image.Replace(@"data:image/jpeg;base64,", "");