我正在尝试使用dotnetcore的system.drawing.common@4.5将水印添加到jpeg图片中,在我的PC开发环境中一切正常,但是当它在linux服务器上运行时,图像的质量会下降。
string inputFile = "inputFile.jpg";
string waterMarkFile = "waterMark.png";
var wmImage = Image.FromFile(waterMarkFile);
FileInfo input = new FileInfo(inputFile);
using (var stream = new MemoryStream())
{
using (var fs = input.OpenRead())
{
fs.CopyTo(stream);
using (var outputStream = new MemoryStream())
{
using (var img = Image.FromStream(stream))
{
using (var graphic = Graphics.FromImage(img))
{
int initX = img.Width / 2;
int initY = img.Height / 2;
int wmWidth = img.Width * 0.1 > wmImage.Width ? (int)(img.Width * 0.1) : img.Width;
int wmHeight = (wmImage.Height * wmWidth) / wmImage.Width;
int offsetX = wmWidth / 2;
int offsetY = wmHeight / 2;
for (int x = initX; x < img.Width + wmWidth; x += (int)(wmWidth * 2.5))
{
for (int y = initY; y < img.Height + wmHeight; y += (int)(wmHeight * 2.5))
{
graphic.DrawImage(wmImage, x - offsetX, y - offsetY, wmWidth, wmHeight);
if (x != initX || y !=initY)
{
graphic.DrawImage(wmImage, initX - (x - initX) - offsetX , y - offsetY, wmWidth, wmHeight);
graphic.DrawImage(wmImage, initX - (x - initX) - offsetX, initY - (y - initY) - offsetY, wmWidth, wmHeight);
graphic.DrawImage(wmImage, x - offsetX, initY - (y - initY) - offsetY, wmWidth, wmHeight);
}
}
}
img.Save($"wm_{inputFile}");
}
}
}
}
}
wmImage.Dispose();
答案 0 :(得分:1)
问题依然存在。我在使用基于 Debian 的 aspnet 核心映像(3.1-buster-slim、5.0-buster-slim)时遇到了同样的问题。看起来这里将安装旧版本的 libgdiplus。在本地环境中运行应用程序对我来说不是解决方案(一切都必须在 kubernetes pods 上运行...)
我找到了两个解决方案:
我为这两个场景创建了 Dockerfiles 并发布了一个 GitHub repository: