• C# 图片按比例进行压缩


    1、对图片进行压缩,保存在本地

    对于一个200k的png文件按0.6的缩放比例进行压缩,压缩后的大小为20k左右

    对于一个80k的jpg文件按0.6的缩放比例压缩,压缩后为13k左右

    1. public void imageZoom(string name, Double zoomScale)
    2. {
    3. Bitmap btImage = new Bitmap(name);
    4. Image serverImage = btImage;
    5. int width = (int)(serverImage.Width * zoomScale);
    6. int height = (int)(serverImage.Height * zoomScale);
    7. //画板大小
    8. int finalWidth = width, finalHeight = height;
    9. int srcImageWidth = serverImage.Width;
    10. int srcImageHeight = serverImage.Height;
    11. if (srcImageWidth > srcImageHeight)
    12. {
    13. finalHeight = srcImageHeight * width / srcImageWidth;
    14. }
    15. else
    16. {
    17. finalWidth = srcImageWidth * height / srcImageHeight;
    18. }
    19. //新建一个bmp图片
    20. Image newImage = new Bitmap(width, height);
    21. //新建一个画板
    22. Graphics g = Graphics.FromImage(newImage);
    23. //设置高质量插值法
    24. g.InterpolationMode = InterpolationMode.High;
    25. //设置高质量,低速度呈现平滑程度
    26. g.SmoothingMode = SmoothingMode.HighQuality;
    27. //清空画布并以透明背景色填充
    28. g.Clear(Color.White);
    29. //在指定位置并且按指定大小绘制原图片的指定部分
    30. g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);
    31. //以jpg格式保存缩略图
    32. MemoryStream msSaveImage = new MemoryStream();
    33. newImage.Save(@"D:\1.png",ImageFormat.Jpeg);
    34. serverImage.Dispose();
    35. newImage.Dispose();
    36. g.Dispose();
    37. }
    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. OpenFileDialog ofd = new OpenFileDialog();
    4. ofd.ShowDialog();
    5. imageZoom(ofd.FileName,0.6);
    6. }

    2、对图片进行压缩,转换成Base64后进行传输,可测量字符串长度来对比

    对一张图片转换成base64后,测量base64字符串的长度,对于一个80k的图片,压缩前长度为110800多,压缩后长度不到20000,减小了很多,便于传输。

    网上有关于对字符串进行压缩的,那是针对纯字符串,对于已经转换成base64的字符串,使用GZipStream类来压缩数据基本上没有效果。

    1. public string ImageToBase64(string name,Double zoomScale)
    2. {
    3. Bitmap btImage = new Bitmap(name);
    4. Image serverImage = btImage;
    5. int width = (int)(serverImage.Width * zoomScale);
    6. int height = (int)(serverImage.Height * zoomScale);
    7. //画板大小
    8. int finalWidth = width, finalHeight = height;
    9. int srcImageWidth = serverImage.Width;
    10. int srcImageHeight = serverImage.Height;
    11. if (srcImageWidth > srcImageHeight)
    12. {
    13. finalHeight = srcImageHeight * width / srcImageWidth;
    14. }
    15. else
    16. {
    17. finalWidth = srcImageWidth * height / srcImageHeight;
    18. }
    19. //新建一个bmp图片
    20. Image newImage = new Bitmap(width, height);
    21. //新建一个画板
    22. Graphics g = Graphics.FromImage(newImage);
    23. //设置高质量插值法
    24. g.InterpolationMode = InterpolationMode.High;
    25. //设置高质量,低速度呈现平滑程度
    26. g.SmoothingMode = SmoothingMode.HighQuality;
    27. //清空画布并以透明背景色填充
    28. g.Clear(Color.White);
    29. //在指定位置并且按指定大小绘制原图片的指定部分
    30. g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);
    31. //以jpg格式保存缩略图
    32. MemoryStream msSaveImage = new MemoryStream();
    33. newImage.Save(msSaveImage, ImageFormat.Jpeg);
    34. serverImage.Dispose();
    35. newImage.Dispose();
    36. g.Dispose();
    37. byte[] imageBytes = msSaveImage.ToArray();
    38. msSaveImage.Close();
    39. return Convert.ToBase64String(imageBytes);
    40. }

  • 相关阅读:
    pycharm 远程运行报错 Failed to prepare environment
    cmake(14):利用set_property命令设置全局属性
    自我成长自学必备网站,终生学习平台
    A-Level经济例题解析及练习Opportunity Cost
    Flink DataStream创建执行环境的正确方式与细节问题
    若依前后端分离如何解决匿名注解启动报错?
    猿创征文|vue组件之间的传值
    postgresql 数据库巡检
    [JavaWeb] Tomcat服务器的配置
    网易数帆 Envoy Gateway 实践之旅:坚守 6 年,峥嵘渐显
  • 原文地址:https://blog.csdn.net/wjbych/article/details/133557118