using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; using ImageSharp; using ImageSharp.Drawing; using ImageSharp.PixelFormats; using ImageSharp.Processing; using SixLabors.Fonts; using Font = SixLabors.Fonts.Font; using FontFamily = SixLabors.Fonts.FontFamily; using FontStyle = SixLabors.Fonts.FontStyle; using Image = ImageSharp.Image; namespace CatalogLib { public class ImgSharpCreator : IImageProcessor { private FileInfo _currentFile; public void Start(FileInfo workFile) { _currentFile = workFile; using (Image image = Image.Load(workFile.FullName)/* new Image(workFile.FullName)*/) { //image.Rotate(-90); if (PicSettings.Instance.GeneraleRotazioneAutomatica) { image.AutoOrient(); //var exif = image.MetaData.ExifProfile; //if (exif != null) //{ // var o = exif.GetValue(ExifTag.Orientation); // if (o != null) // { // var v = (ushort)o.Value; // switch (v) // { // //1 = Horizontal(normal) // //2 = Mirror horizontal // //3 = Rotate 180 // //4 = Mirror vertical // //5 = Mirror horizontal and rotate 270 CW // //6 = Rotate 90 CW // //7 = Mirror horizontal and rotate 90 CW // //8 = Rotate 270 CW // case 1: // break; // case 2: // image.Flip(FlipType.Horizontal); // break; // case 3: // //image.Rotate(180f); // //image.Rotate(90); // image.Rotate(RotateType.Rotate180); // break; // case 4: // image.Flip(FlipType.Vertical); // break; // case 5: // image.RotateFlip(RotateType.Rotate270, FlipType.Horizontal); // break; // case 6: // image.Rotate(RotateType.Rotate90); // break; // case 7: // image.RotateFlip(RotateType.Rotate90, FlipType.Horizontal); // break; // case 8: // //image.Rotate(-90); // image.Rotate(RotateType.Rotate270); // image.MetaData.ExifProfile.SetValue(ExifTag.Orientation, new ExifValue(exif.GetValue(ExifTag.Orientation)).Value = (ushort)1); // break; // } // } //} } if (PicSettings.Instance.EnableText) { SetExtraText(image); } //JpegDecoder j = new JpegDecoder(); var va = Vector.IsHardwareAccelerated; //image.Resize(PicSettings.Instance.FotoLarghezza, PicSettings.Instance.FotoAltezza); //image.Resize(2240, 2240); //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont); //var font = new Font(fff, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular); //image.DrawText("sssssssssssssssssssssssssssssssssssssssssssssss", font, Color.Black, new Vector2(200, 200)); image.Save(Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name)); //image.Resize(200, 200).Save(""); } } private void SetExtraText(Image image) { if (string.IsNullOrWhiteSpace(PicSettings.Instance.TestoApplicareOrizzontale)) { Debug.WriteLine($"{_currentFile.Name} No text"); return; } var fo = SixLabors.Fonts.SystemFonts.Find(PicSettings.Instance.NomeFont); //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont); //var fff = FontCollection.SystemFonts.Find("Segoe Print"); var font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular); //var font = new Font(fff, 8f, FontStyle.Regular); //Color c = Color.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB)); Rgba32 g = Rgba32.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB)); //TextMeasurer measurer = new TextMeasurer(); //var size = measurer.MeasureText(PicSettings.Instance.TestoApplicareOrizzontale, font, 72); //float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height); //Font scaledFont = new Font(font, scalingFactor * font.Size); //image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, new Vector2(0, 0)); Vector2 center = new Vector2(image.Width / 2, image.Height / 2); //center horizontally, 10px down var size = TextMeasurer.Measure(PicSettings.Instance.TestoApplicareOrizzontale, new RendererOptions(font)); float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height); Font scaledFont = new Font(font, scalingFactor * font.Size); image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }); } private void WriteTextFixed(Image image) { var fo = SixLabors.Fonts.SystemFonts.Find("Microsoft Sans Serif"); var font = new Font(fo, 8, FontStyle.Regular); Rgba32 g = Rgba32.FromHex("#FF00FFFF"); Vector2 center = new Vector2(image.Width / 2, image.Height / 2); var size = TextMeasurer.Measure("Test test test test test", new RendererOptions(font)); float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height); Font scaledFont = new Font(font, scalingFactor * font.Size); image.DrawText("Test test test test test", scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }); } private string FlipRgbString(string originalString) { string s; if (originalString.Length == 7) { s = string.Concat("#", originalString.Substring(1, 6)); } else { s = string.Concat("#", originalString.Substring(3, 6), originalString.Substring(1, 2)); } return s; } } }