从base64string生成缩略图C#

时间:2016-01-26 19:01:41

标签: c# base64 drawing thumbnails

我正在尝试从(average > "+ ViewBag.FBGLG +") 生成缩略图。我将图像存储在表格中,并尝试从存储的base64string生成缩略图。

如果我提供图像的路径,我可以生成缩略图,但在我的情况下这不起作用。

这是从图像路径生成缩略图的有效解决方案:

base64string

任何人都可以提供有关如何使用protected void GenerateThumbnail(object sender, EventArgs e) { string path = Server.MapPath("../src/img/myImage.png"); System.Drawing.Image image = System.Drawing.Image.FromFile(path); using (System.Drawing.Image thumbnail = image.GetThumbnailImage(100, 100, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero)) { using (MemoryStream memoryStream = new MemoryStream()) { thumbnail.Save(memoryStream, ImageFormat.Png); Byte[] bytes = new Byte[memoryStream.Length]; memoryStream.Position = 0; memoryStream.Read(bytes, 0, (int)bytes.Length); string base64String = Convert.ToBase64String(bytes, 0, bytes.Length); Image2.ImageUrl = "data:image/png;base64," + base64String; Image2.Visible = true; } } } 代替生成缩略图的图片路径的任何建议吗?

2 个答案:

答案 0 :(得分:2)

假设ls是base64字符串,您可以将其转换为字节数组并使用它来构造起始图像。

b64

完成后请务必丢弃拇指。

答案 1 :(得分:1)

在线发现混合的一些技巧。 (一个来自@Plutonix)

string ThumbNailBase64 = ResizeBase64ImageString(YourBase64String,200, 300);

base64输入=> resize => BASE64

您可以使用自动宽高比获得所需的缩略图。

public static string ResizeBase64ImageString(string Base64String, int desiredWidth, int desiredHeight)
{
    Base64String = Base64String.Replace("data:image/png;base64,", "");

    // Convert Base64 String to byte[]
    byte[] imageBytes = Convert.FromBase64String(Base64String);

    using (MemoryStream ms = new MemoryStream(imageBytes))
    {                
        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        Image image = Image.FromStream(ms, true);

        var imag = ScaleImage(image, desiredWidth, desiredHeight);

        using (MemoryStream ms1 = new MemoryStream())
        {
            //First Convert Image to byte[]
            imag.Save(ms1, imag.RawFormat);
            byte[] imageBytes1 = ms1.ToArray();

            //Then Convert byte[] to Base64 String
            string base64String = Convert.ToBase64String(imageBytes1);
            return "data:image/png;base64,"+base64String;
        }
    }
}

public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
{
    var ratioX = (double)maxWidth / image.Width;
    var ratioY = (double)maxHeight / image.Height;
    var ratio = Math.Min(ratioX, ratioY);

    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);

    var newImage = new Bitmap(newWidth, newHeight);

    using (var graphics = Graphics.FromImage(newImage))
        graphics.DrawImage(image, 0, 0, newWidth, newHeight);

    return newImage;
}