画像に著作権を追加しようとしています。画像の解像度が4592x2576
未満の場合は、私が望むように動作します。しかし、2番目のケース(解像度が4592x2576
の場合)では、著作権が大きすぎます。C#で画像に著作権を追加 - 異常な動作
詳細は添付ファイルを参照してください。私は(becase最初場合fontSize
に182
に等しい場合)手動fontSize = 182
を設定した場合、影響がない第2のケースで
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();
}
}
}
}
、結果は同じです!
どうすれば修正できますか?
P.S.最初と2番目の添付ファイルは私が望む結果を示し、3番目と4番目はバグを示しています。私はfontSizeを190
から182
に手動で変更しました。
別のフォントを試しましたか?おそらくそれは物事を台無しにしているフォントです。 –
[TextRenderer](http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx)クラス( 'MeasureText' /' DrawText'メソッド)を使用して文字列を描画してみてください。これはGDIレンダリング( 'Graphics.DrawString'でのGDI +レンダリングとは対照的)を行い、通常はより一貫した結果を返します。メソッドのオーバーロードはわずかに異なりますが、そのパーツを簡単に変更できる必要があります。 – Groo
@Grooの場合、これらのメソッドにはアセンブリSystem.Windows.Formsが必要です。 asp.netで可能ですか? – Alexandre