我試圖給圖像添加版權。如果圖像的分辨率低於4592x2576
,它會按我的意願工作。但在第二種情況下(在這種情況下,如果分辨率等於4592x2576
)會增加版權太大的規模。在C#中爲圖像添加版權 - 奇怪的行爲
查看附件瞭解詳情。
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
(becase的在第一種情況是fontSize
等於182
),沒有什麼效果,其結果是一樣的!
我該如何解決?
P.S.第一個和第二個附件顯示我想要的結果,第三個和第四個顯示錯誤。在第三個附件中注意我將fontSize從190
手動更改爲182
。
你嘗試過不同的字體嗎?也許這是弄亂事情的字體。 – 2011-12-19 08:42:49
嘗試使用[TextRenderer](http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx)類('MeasureText' /'DrawText'方法)繪製字符串。它執行GDI渲染(與'Graphics.DrawString'中的GDI +渲染相反),並且通常返回更一致的結果。方法重載稍有不同,但您應該可以輕鬆修改該部分。 – Groo 2011-12-19 09:02:41
@Groo,這些方法需要組裝System.Windows.Forms。在asp.net中可能嗎? – Alexandre 2011-12-19 09:13:13