gpt4 book ai didi

c# - 在 Visual Studio 中使用图形裁剪图像会更改文件类型 header

转载 作者:行者123 更新时间:2023-11-30 21:38:03 26 4
gpt4 key购买 nike

我正在尝试裁剪图像并将其保存到服务器。我遇到的问题是,我遵循的裁剪过程似乎对 jpeg 和 jpg 图像有副作用。我正在尝试的过程方法与我在许多关于在 asp.net 中裁剪图像的帖子中发现的方法略有不同,因为我对图像使用 byte[]。

    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)开头。 (Ψð JFIF H H Ϋ „ )另一方面,当我用记事本打开 .png 图像时,我注意到它以

开头
‰PNG

在裁剪过程之后,我的裁剪图像也是这样开始的。有什么方法可以保留原始元数据或从一开始就将图像裁剪为 .jpg 文件,还是我在这里遗漏了其他内容?

最佳答案

我可以想到两种方法:

  1. 将 byte[] 保存为 Jpeg 图像,然后将新字节发送回用户。
  2. 创建一个空的 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:\Users\darellis\Desktop\image1.jpg");
}

croppedBmpImage.Dispose();
}

return result;
}

关于c# - 在 Visual Studio 中使用图形裁剪图像会更改文件类型 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46421238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com