我有一組圖像,我使用System.Windows
和System.Windows.Media.Imaging
(是的,不是在GDI +中)按照here中的教程以編程方式在它們上繪製簡單水印。應用簡單水印後圖像大小急劇增加
大多數圖像不超過500Kb,但在應用簡單的水印後,這是一個帶有透明背景的文本,圖像大小急劇增加。
例如,440KB圖像與下面方法施加水印後成爲8.33MB,並且被電我。
private static BitmapFrame ApplyWatermark(BitmapFrame image, string waterMarkText) {
const int x = 5;
var y = image.Height - 20;
var targetVisual = new DrawingVisual();
var targetContext = targetVisual.RenderOpen();
var brush = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFFFFF"));
brush.Opacity = 0.5;
targetContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height));
targetContext.DrawRectangle(brush, new Pen(), new Rect(0, y, image.Width, 20));
targetContext.DrawText(new FormattedText(waterMarkText, CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
new Typeface("Batang"), 13, Brushes.Black), new Point(x, y));
targetContext.Close();
var target = new RenderTargetBitmap((int)image.Width, (int)image.Height, 96, 96, PixelFormats.Default);
target.Render(targetVisual);
var targetFrame = BitmapFrame.Create(target);
return targetFrame;
}
我注意到圖像質量比原始圖像有所提高。圖像更平滑,顏色更淺。但是,你知道我不是很想要這個。我希望圖像保持原樣,但包含水印。沒有質量增加,當然圖像尺寸沒有劇烈變化。
是否有任何設置,我在這裏錯過告訴我的程序保持與源圖像一樣的質量?在我的ApplyWatermark
方法發生變化後,如何防止圖像大小發生顯着變化?
編輯
這是我如何轉換BitmapFrame
到Stream
。然後我用Stream
保存圖像AmazonS3
private Stream EncodeBitmap(BitmapFrame image) {
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(image));
var memoryStream = new MemoryStream();
enc.Save(memoryStream);
return memoryStream;
}
2.這是我如何得到BitmapFrame
從Stream
private static BitmapFrame ReadBitmapFrame(Stream stream) {
var photoDecoder = BitmapDecoder.Create(
stream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.None);
return photoDecoder.Frames[0];
}
這是我從讀文件本地目錄
public Stream FindFileInLocalImageDir() {
try {
var path = @"D:\Some\Path\Image.png";
return !File.Exists(path) ? null : File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
} catch (Exception) {
return null;
}
}
什麼是你開始的圖像格式?是否還有其他代碼在添加水印後實際上將圖像保存到磁盤? –
圖片格式爲.png,圖片也會保存爲.png。處理完成後,圖像將被寫入AmazonS3。有一種將'BitmapFrame'轉換爲'Stream'的不同方法,然後使用.net的AmazonS3 API將流保存到Amazon。 – user3332579
可以將'BitmapFrame'轉換爲'Stream'轉換器嗎?我是否也應該發佈該代碼? – user3332579