繁体   English   中英

从 Base64 到 Image

[英]Image from Base64 to Image

我要求用户上传一张图片,可以是任何图片格式。

我将 base64 数据以及文件名(从中可以获取扩展名)传递给我的 .Net 控制器。

然后我将该 base64 字符串转换为图像。

    public static Image Base64ToImage(string base64String)
    {

        // Convert base 64 string to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        // Convert byte[] to Image
        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            Image image = Image.FromStream(ms, true);
            return image;
        }
    }

我收到一个错误:

输入不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符或填充字符中的非法字符

我认为这是因为 base54 字符串具有:

"data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...." 在开头。

所以我需要剪掉“data:image/jpeg;base64,”,然后保存? 当我删除有关文件类型的数据时,是否需要在其他地方指定它?

我发现的所有示例似乎都没有从前面修剪任何东西。 他们只是保存字符串。 我猜,我这边的某些东西正在添加该标题?

嗨,请找到我过去一直使用的工作转换器版本,请告诉您是否需要更多解释。

似乎您转换为 base64 是罪魁祸首!

       /// <summary>
    ///1 Convert String to Image
    /// </summary>
    /// <param name="commands"></param>
    /// <returns></returns>

    public Image ConvertStringtoImage(string commands)
    {

        byte[] photoarray = Convert.FromBase64String(commands);
        MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length);
        ms.Write(photoarray, 0, photoarray.Length);
        Image image = System.Drawing.Image.FromStream(ms);
        return image;

    }


    /// <summary>
    ///2. Read picture from Database and return as image
    /// just change the mysql to sql server type.
    /// </summary>
    /// <param name="commands"></param>
    /// <returns></returns>

    public Image Readphotofromdb(string commands)
    {
        Image image = null;
        using (MySqlConnection dbConn = new MySqlConnection(connector))
        {
            using (MySqlCommand cmd = new MySqlCommand(commands, dbConn))
            {
                dbConn.Open();
                using (MySqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        byte[] photoarray = Convert.FromBase64String(reader.GetString(0));
                        MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length);
                        ms.Write(photoarray, 0, photoarray.Length);
                        image = new Bitmap(ms);

                    }
                }
            }
        }
        MySqlConnection.ClearAllPools();
        return image;

    }

    /// <summary>
    /// 3. Convert Image to base64 string
    /// </summary>
    /// <param name="image"></param>
    /// <returns></returns>


    public string ConvertImageToString(Image image)
    {
        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            stream.Close();
            byteArray = stream.ToArray();
        }
        string base64String = Convert.ToBase64String(byteArray);
        return base64String;
    }

使用像 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ......9= 这样的图像数据代替 data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQg9=

 private void GetImage(){
  string imagedata="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQ.. 
   ....9=";
  Image image=ImageFromBase64(imagedata);
}
public static Image ImageFromBase64(string base64String)
    {
                
        byte[] imageBytes = Convert.FromBase64String(base64String);
         
        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            Image image = Image.FromStream(ms, true);
            return image;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM