[英]Adding copyright to an image in C# - strange behaviour
我正在嘗試為圖像添加版權。 如果圖像的分辨率小於4592x2576
,則可以按照我的要求工作。 但是在第二種情況下(在這種情況下,如果分辨率等於4592x2576
),則會增加版權的大小。
請查看附件以了解詳細信息。
class Program
{
private static string file5 = "d:\\DSC01305.JPG";
private static string file6 = "d:\\DSC01427.JPG";
static void Main(string[] args)
{
AddCopyrightWithText(file5);//good
AddCopyrightWithText(file6);//not good
}
private const string CopyrightText = "mysite.com";
private const int MaxFontSize = 190;
const int coefficient = 20;
public static void AddCopyrightWithText(string fileName)
{
using (var img = Image.FromFile(fileName))
{
using (var gr = Graphics.FromImage(img))
{
var color = Color.FromArgb(90, 241, 235, 105);
int fontSize = img.Width / coefficient;
if (fontSize > MaxFontSize)
fontSize = MaxFontSize;
var font = new Font("Comic Sans MS", (float)fontSize, FontStyle.Bold);
var stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
gr.SmoothingMode = SmoothingMode.AntiAlias;
int y = img.Height - (int)gr.MeasureString(CopyrightText, font, int.MaxValue).Height;
int x = img.Width / 2;
gr.DrawString(CopyrightText, font, new SolidBrush(color), new Point(x, y), stringFormat);
}
using (var ms = new MemoryStream())
{
img.Save(ms, ImageFormat.Jpeg);
img.Dispose();
File.Delete(fileName);
var file = new FileStream(fileName, FileMode.Create, FileAccess.Write);
ms.Seek(0, SeekOrigin.Begin);
ms.WriteTo(file);
file.Close();
file.Dispose();
}
}
}
}
在第二種情況下,如果我手動設置fontSize = 182
(在第一種情況下fontSize
等於182
),則沒有任何效果,結果是一樣的!
我如何解決它?
PS第一和第二個附件顯示了我想要的結果,第三個和第四個附件顯示了該錯誤。 請注意,在第三個附件中,我將fontSize手動從190
更改為182
。
有必要使用GraphicsUnit.Pixel
var font = new Font("Comic Sans MS", (float)fontSize, FontStyle.Bold, GraphicsUnit.Pixel);
原因是,不帶GraphicsUnit
參數的Font
構造函數將使用GraphicsUnit.Point
。
這與DPI信息有關,對於某些圖像格式,DPI信息存儲在圖像中(對於其他圖像,DPI信息使用系統默認值)。 點是相對於英寸的,因此圖像的不同DPI意味着像素大小也不同。 因此,不同的圖像最終將具有不同大小的文本。 如果我們要根據圖像的DPI信息打印圖像,並且在每個打印輸出中具有相同大小的文本,那將是很棒的。 為了使屏幕上的使用保持一致,像素大小很重要,因此我們將其明確化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.