c# 如果image过大,就缩小到300k以下 参考 public bool SaveCheckPicture(string path, string fileName, Image img, out string msg) { msg = string.Empty; try { MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] data = new byte[ms.Length]; //ms.Read(data, 0, Convert.ToInt32(ms.Length)); data = ms.GetBuffer(); ms.Close(); img.Dispose(); return SaveCheckPicture(path, fileName, data, out msg); } catch (Exception ex) { msg = ex.ToString(); return false; } }
时间: 2024-01-12 07:02:35 浏览: 74
你可以在SaveCheckPicture方法中添加图片压缩的代码,具体步骤如下:
1. 在方法中添加一个maxSize参数,表示图片最大允许的大小,单位为字节。
2. 使用MemoryStream将原始图片转换为JPEG格式,并计算当前图片的大小。
3. 如果图片大小未超过maxSize,直接将图片保存为文件。
4. 如果图片大小超过maxSize,就计算需要缩小的比例,同时修改图片的大小。
5. 使用MemoryStream将缩小后的图片保存为JPEG格式,并将图片保存为文件。
下面是一个简单的示例代码:
```
public bool SaveCheckPicture(string path, string fileName, Image img, int maxSize, out string msg)
{
msg = string.Empty;
try
{
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] data = ms.ToArray();
img.Dispose();
if (data.Length <= maxSize)
{
File.WriteAllBytes(Path.Combine(path, fileName), data);
}
else
{
float ratio = (float)maxSize / data.Length;
int targetWidth = (int)(img.Width * ratio);
int targetHeight = (int)(img.Height * ratio);
Bitmap resized = new Bitmap(targetWidth, targetHeight);
Graphics g = Graphics.FromImage(resized);
g.DrawImage(img, new Rectangle(0, 0, targetWidth, targetHeight));
MemoryStream resizedMs = new MemoryStream();
resized.Save(resizedMs, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] resizedData = resizedMs.ToArray();
resizedMs.Close();
resized.Dispose();
File.WriteAllBytes(Path.Combine(path, fileName), resizedData);
}
return true;
}
catch (Exception ex)
{
msg = ex.ToString();
return false;
}
}
```
在上面的示例代码中,我们首先将原始图片保存到MemoryStream对象中,并将其转换为字节数组。然后判断图片大小是否超过maxSize,如果未超过,直接将图片保存为文件。如果超过,就根据需要缩小图片,并将缩小后的图片保存为文件。你可以根据需要修改maxSize参数和保存文件名。
阅读全文