我正在尝试裁剪图像并将其保存到服务器。我遇到的问题是,我遵循的裁剪过程似乎对JPEG和JPG图像具有副作用。我正在尝试的过程方法与我在ASP.NET中裁剪图像的许多帖子中发现的过程略有不同,因为我正在为图像使用字节[]。
public static byte[] CropImage(byte[] imgBytes, Rectangle rec)
{
MemoryStream ms = new MemoryStream(imgBytes);
Image img = Image.FromStream(ms);
Bitmap croppedBmpImage = new Bitmap(200, 200);
using (Graphics gr = Graphics.FromImage(croppedBmpImage))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(img, new Rectangle(0, 0, 200, 200),
rec,
GraphicsUnit.Pixel);
}
ImageConverter converter = new ImageConverter();
byte[] result = (byte[]) converter.ConvertTo(croppedBmpImage, typeof(byte[]));
croppedBmpImage.Dispose();
return result;
}
该图像在我的计算机上没有任何预览问题的情况下正确裁剪。但是,我正在使用Alfresco存储图像,并且看到该应用程序内的缩略图预览不适用于图像。从我看到的情况下,仅发生到.jpg和.jpeg图像。根据我阅读的.jpg和.jpeg图像存储了一些元数据,这些元数据似乎从我的裁剪图像中删除。当我用记事本打开原始.jpg或.jpeg映像时,我会注意到它始于一些元数据国王(例如JFIF)。(ψΰJfifh hhϋ„)另一方面,当我使用记事本a .png图像打开时,我注意到它以
开头‰PNG
在裁剪过程之后,我的裁剪图像也像这样开始。从一开始就可以保留原始元数据或将图像作为.jpg文件裁剪,或者我在这里缺少其他内容?
我可以想到两种方法:
- 将字节[]保存为JPEG映像,然后将新字节发送回用户。
- 创建一个空的JPEG,然后附加裁剪字节。
对于第一个选项,您可以看到一个示例:
public static byte[] CropImage(byte[] imgBytes, Rectangle rec)
{
byte[] result = null;
using (MemoryStream mStream = new MemoryStream(imgBytes))
{
Image img = Image.FromStream(mStream);
Bitmap croppedBmpImage = new Bitmap(200, 200);
using (Graphics graphics = Graphics.FromImage(croppedBmpImage))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(img, new Rectangle(0, 0, 200, 200),
rec,
GraphicsUnit.Pixel);
}
ImageConverter converter = new ImageConverter();
result = (byte[])converter.ConvertTo(croppedBmpImage, typeof(byte[]));
using (MemoryStream jpegStream = new MemoryStream(result))
{
croppedBmpImage.Save(jpegStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Image img1 = Image.FromStream(jpegStream);
img1.Save(@"C:UsersdarellisDesktopimage1.jpg");
}
croppedBmpImage.Dispose();
}
return result;
}