在Visual Studio中使用图形裁剪图像更改文件类型标题



我正在尝试裁剪图像并将其保存到服务器。我遇到的问题是,我遵循的裁剪过程似乎对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文件裁剪,或者我在这里缺少其他内容?

我可以想到两种方法:

  1. 将字节[]保存为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:UsersdarellisDesktopimage1.jpg");
            }
            croppedBmpImage.Dispose();
        }
        return result;
    }

最新更新