我有以下任務。拍攝一張基本圖像並在其上覆蓋另一張。基本圖像是8b PNG以及覆蓋。 這裏是基礎(左)和覆蓋(右)圖像。.NET中的Png圖像處理
這裏是一個結果,以及它如何必須尋找。
在左邊的圖片是一個屏幕截圖,當一個畫面是在另一個之上(html和定位)和第二個是編程合併的結果。
正如您在屏幕截圖中看到的那樣,文字的邊框較暗。而且,這裏是圖像
- 基地圖像14.9 KB
- 疊加圖像6.87 KB
- 結果圖像的大小34.8 KB
所得圖像的大小也是巨大的
這裏是我用來合併這些圖片的代碼
/*...*/
public Stream Concatinate(Stream baseStream, params Stream[] overlayStreams) {
var @base = Image.FromStream(baseStream);
var canvas = new Bitmap(@base.Width, @base.Height);
using (var g = canvas.ToGraphics()) {
g.DrawImage(@base, 0, 0);
foreach (var item in overlayStreams) {
using (var overlayImage = Image.FromStream(item)) {
try {
Overlay(@base as Bitmap, overlayImage as Bitmap, g);
} catch {
}
}
}
}
var ms = new MemoryStream();
canvas.Save(ms, ImageFormat.Png);
canvas.Dispose();
@base.Dispose();
return ms;
}
/*...*/
/*Tograpics extension*/
public static Graphics ToGraphics(this Image image,
CompositingQuality compositingQuality = CompositingQuality.HighQuality,
SmoothingMode smoothingMode = SmoothingMode.HighQuality,
InterpolationMode interpolationMode = InterpolationMode.HighQualityBicubic) {
var g = Graphics.FromImage(image);
g.CompositingQuality = compositingQuality;
g.SmoothingMode = smoothingMode;
g.InterpolationMode = interpolationMode;
return g;
}
private void Overlay(Bitmap source, Bitmap overlay, Graphics g) {
if (source.Width != overlay.Width || source.Height != overlay.Height)
throw new Exception("Source and overlay dimensions do not match");
var area = new Rectangle(0, 0, source.Width, source.Height);
g.DrawImage(overlay, area, area, GraphicsUnit.Pixel);
}
個
我的問題是
- 我應該以合併圖像來實現的結果的截圖嗎?
- 如何降低結果圖像的大小?
System.Drawing
是一個合適的工具嗎?還是有更好的工具來處理PNG的.NET?
嗯..很有趣........ – Anirudha