2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

C# 图片按比例进行压缩

时间:10-19来源:作者:点击数:31

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

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

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

  • public void imageZoom(string name, Double zoomScale)
  • {
  • Bitmap btImage = new Bitmap(name);
  • Image serverImage = btImage;
  • int width = (int)(serverImage.Width * zoomScale);
  • int height = (int)(serverImage.Height * zoomScale);
  • //画板大小
  • int finalWidth = width, finalHeight = height;
  • int srcImageWidth = serverImage.Width;
  • int srcImageHeight = serverImage.Height;
  • if (srcImageWidth > srcImageHeight)
  • {
  • finalHeight = srcImageHeight * width / srcImageWidth;
  • }
  • else
  • {
  • finalWidth = srcImageWidth * height / srcImageHeight;
  • }
  • //新建一个bmp图片
  • Image newImage = new Bitmap(width, height);
  • //新建一个画板
  • Graphics g = Graphics.FromImage(newImage);
  • //设置高质量插值法
  • g.InterpolationMode = InterpolationMode.High;
  • //设置高质量,低速度呈现平滑程度
  • g.SmoothingMode = SmoothingMode.HighQuality;
  • //清空画布并以透明背景色填充
  • g.Clear(Color.White);
  • //在指定位置并且按指定大小绘制原图片的指定部分
  • g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);
  • //以jpg格式保存缩略图
  • MemoryStream msSaveImage = new MemoryStream();
  • newImage.Save(@"D:\1.png",ImageFormat.Jpeg);
  • serverImage.Dispose();
  • newImage.Dispose();
  • g.Dispose();
  • }
  • private void button1_Click(object sender, EventArgs e)
  • {
  • OpenFileDialog ofd = new OpenFileDialog();
  • ofd.ShowDialog();
  • imageZoom(ofd.FileName,0.6);
  • }

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

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

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

  • public string ImageToBase64(string name,Double zoomScale)
  • {
  • Bitmap btImage = new Bitmap(name);
  • Image serverImage = btImage;
  • int width = (int)(serverImage.Width * zoomScale);
  • int height = (int)(serverImage.Height * zoomScale);
  • //画板大小
  • int finalWidth = width, finalHeight = height;
  • int srcImageWidth = serverImage.Width;
  • int srcImageHeight = serverImage.Height;
  • if (srcImageWidth > srcImageHeight)
  • {
  • finalHeight = srcImageHeight * width / srcImageWidth;
  • }
  • else
  • {
  • finalWidth = srcImageWidth * height / srcImageHeight;
  • }
  • //新建一个bmp图片
  • Image newImage = new Bitmap(width, height);
  • //新建一个画板
  • Graphics g = Graphics.FromImage(newImage);
  • //设置高质量插值法
  • g.InterpolationMode = InterpolationMode.High;
  • //设置高质量,低速度呈现平滑程度
  • g.SmoothingMode = SmoothingMode.HighQuality;
  • //清空画布并以透明背景色填充
  • g.Clear(Color.White);
  • //在指定位置并且按指定大小绘制原图片的指定部分
  • g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);
  • //以jpg格式保存缩略图
  • MemoryStream msSaveImage = new MemoryStream();
  • newImage.Save(msSaveImage, ImageFormat.Jpeg);
  • serverImage.Dispose();
  • newImage.Dispose();
  • g.Dispose();
  • byte[] imageBytes = msSaveImage.ToArray();
  • msSaveImage.Close();
  • return Convert.ToBase64String(imageBytes);
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐