首页 > 解决方案 > ImageMagick API 在添加简单矩形时将文件大小增加 10 倍

问题描述

我被要求在给定坐标的给定大小的 tiff/pdf/png/jpg 文件上绘制一个矩形。

我正在使用 ImageMagick(Magick.NET-Q16-AnyCPU 版本 7.23.2.1),因为它支持开箱即用的 TIFF 并且使用 GhostScript 它可以支持 PDF。

使用以下代码,我可以在给定坐标处将矩形添加到任何页面。

        using var sourceMs = new MemoryStream(request.Bytes) { Position = 0 };

        using var images = new MagickImageCollection();
        using var ms = new MemoryStream();
        sourceMs.Position = 0;
        images.Read(sourceMs, new MagickReadSettings());
        foreach (var page in request.Pages)
        {
            foreach (var redaction in page.Redactions)
            {
                images[page.PageNumber].Draw(
                    new Drawables()
                        .FillColor(MagickColors.DarkGray)
                        .Rectangle(
                            redaction.XCoordinate,
                            redaction.YCoordinate,
                                redaction.Width,
                                    redaction.Height)
                );
            }
        }

        // I tried this first for reducing file size
        //foreach (var image in images)
        //{
        //    image.SetCompression(CompressionMethod.LosslessJPEG);
        //    image.Scale(new Percentage(50));
        //}

        images.Write(ms, GetFormat(request.MediaType));

        // new trick to reduce size but tiff is not supported.
        ms.Position = 0;
        var optimizer = new ImageOptimizer();
        optimizer.LosslessCompress(ms);

        ms.Position = 0;
        return ms.ToArray();

然而,一旦添加了矩形 - 最终文件大小是提供给上述函数的原始文件的 10 倍。

我尝试了一些方法来通过添加压缩、缩放和优化器来减小大小,但没有任何效果。我确定我一定错过了什么。

谢谢

标签: c#image.net-coreimagemagicktiff

解决方案


推荐阅读