c# - 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 倍。
我尝试了一些方法来通过添加压缩、缩放和优化器来减小大小,但没有任何效果。我确定我一定错过了什么。
谢谢
解决方案
推荐阅读
- r - 如何将循环的输出添加到 R 数据集中的新列中?
- java - 关于我通过 jda 编码的不和谐机器人的问题
- node.js - nodejs - 从终端打开或关闭谷歌浏览器或默认浏览器选项卡
- javascript - 如何使用 Html.JsonDataSourceVariable 重新加载剑道下拉值?
- php - 存储 ON DUPLICATE KEY UPDATE 重复值
- python - 如何在 jupyter 笔记本中修复“调用 parse_args() 时出现 2 错误”
- plot - 如何在 Octave 的非矩形区域上绘制数据?
- reactjs - 我可以在不知道切片减速器路径的情况下编写选择器吗?
- flutter - 由滑块控制的动画添加到我的照片
- uwp - ScrollViewer 是从哪里来的?