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