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);
- }