کلید خلاصه دسته‌بندی
PSDNET-151 پشتیبانی از افکت لایه سایه داخلی ویژگی
PSDNET-135 پیاده‌سازی رندر لایه پر کننده: الگو ویژگی
PSDNET-187 پشتیبانی از تصاویر شبکه‌ای در فایل‌های فرمت AI ویژگی
PSDNET-225 دریافت ویژگی‌های فرمت‌بندی درونی متن لایه ویژگی
PSDNET-214 صادرات نادرست PSD به سایر فرمت‌ها در صورت داشتن افکت‌های لایه و لایه‌های تنظیم اشکال

تغییرات API عمومی

API‌های اضافه شده:

API‌های حذف شده:

مثال‌های استفاده:

PSDNET-151. پشتیبانی از افکت لایه سایه داخلی

            string sourceFile = "نمونه.psd";

            string destName = "نمونه_خروجی.psd";

            var loadOptions = new PsdLoadOptions()

            {

                LoadEffectsResource = true

            };

            // بارگذاری تصوير موجود به یک نمونه از کلاس PsdImage

            using (var image = (PsdImage)Image.Load(sourceFile, loadOptions))

            {

                var layer = image.Layers[image.Layers.Length - 1];

                var shadowEffect = (IShadowEffect)layer.BlendingOptions.Effects[0];

                shadowEffect.Color = Color.Green;

                shadowEffect.Opacity = 128;

                shadowEffect.Distance = 1;

                shadowEffect.UseGlobalLight = false;

                shadowEffect.Size = 2;

                shadowEffect.Angle = 45;

                shadowEffect.Spread = 50;

                shadowEffect.Noise = 5;

                image.Save(destName, new PsdOptions(image));

            }

PSDNET-135. پیاده‌سازی رندر لایه پر کننده: الگو

            string sourceFile = "نمونه.psd";

            string destName = "نمونه_خروجی.psd";

            // بارگذاری تصویر موجود به یک نمونه از کلاس PsdImage

            using (var image = (PsdImage)Image.Load(sourceFile))

            {

                foreach (var layer in image.Layers)

                {

                    if (layer is FillLayer)

                    {

                        var fillLayer = (FillLayer)layer;

                        var settings = (IPatternFillSettings)fillLayer.FillSettings;

                        settings.HorizontalOffset = -5;

                        settings.VerticalOffset = 12;

                        settings.Scale = 300;

                        settings.Linked = true;

                        settings.PatternData = new int[]

                                                   {

                                                       Color.Black.ToArgb(), Color.Red.ToArgb(),

                                                       Color.Green.ToArgb(), Color.Blue.ToArgb(),

                                                       Color.White.ToArgb(), Color.AliceBlue.ToArgb(),

                                                       Color.Violet.ToArgb(), Color.Chocolate.ToArgb(),

                                                       Color.IndianRed.ToArgb(), Color.DarkOliveGreen.ToArgb(),

                                                       Color.CadetBlue.ToArgb(), Color.YellowGreen.ToArgb(),

                                                       Color.Black.ToArgb(), Color.Azure.ToArgb(),

                                                       Color.ForestGreen.ToArgb(), Color.Sienna.ToArgb(),

                                                   };

                        settings.PatternHeight = 4;

                        settings.PatternWidth = 4;

                        settings.PatternName = "$$$/Presets/Patterns/ColorfulSquare=Colorful Square New\0";

                        settings.PatternId = Guid.NewGuid().ToString() + "\0";

                        fillLayer.Update();

                        break;

                    }

                }

                image.Save(destName, new PsdOptions(image));

            }

PSDNET-187. پشتیبانی از تصاویر شبکه‌ای در فایل‌های فرمت AI

            const double DefaultTolerance = 1e-6;

void AssertIsTrue(bool condition, string message) {

 if (!condition) {

  throw new FormatException(message);

 }

}

string sourceFile = "نمونه.ai";

using(AiImage image = (AiImage) Image.Load(sourceFile)) {

 AiLayerSection layer = image.Layers[0];

 AssertIsTrue(layer.RasterImages != null, "خصوصیت RasterImages باید غیرخالی باشد");

 AssertIsTrue(layer.RasterImages.Length == 1, "خصوصیت RasterImages باید دقیقا یک آیتم داشته باشد");

 AiRasterImageSection rasterImage = layer.RasterImages[0];

 AssertIsTrue(rasterImage.Pixels != null, "خصوصیت rasterImage.Pixels باید غیرخالی باشد");

 AssertIsTrue(rasterImage.Pixels.Length == 100, "خصوصیت rasterImage.Pixels باید دقیقا 100 آیتم داشته باشد");

 AssertIsTrue((uint) rasterImage.Pixels[99] == 0xFFB21616, "rasterImage.Pixels[99] باید برابر 0xFFB21616 باشد");

 AssertIsTrue((uint) rasterImage.Pixels[19] == 0xFF00FF00, "rasterImage.Pixels[19] باید برابر 0xFF00FF00 باشد");

 AssertIsTrue((uint) rasterImage.Pixels[10] == 0xFF01FD00, "rasterImage.Pixels[10] باید برابر 0xFF01FD00 باشد");

 AssertIsTrue((uint) rasterImage.Pixels[0] == 0xFF0000FF, "rasterImage.Pixels[0] باید برابر 0xFF0000FF باشد");

 AssertIsTrue(Math.Abs(0.999875 - rasterImage.Width) < DefaultTolerance, "عرض rasterImage باید 0.99987 باشد");

 AssertIsTrue(Math.Abs(0.999875 - rasterImage.Height) < DefaultTolerance, "ارتفاع rasterImage باید 0.99987 باشد");

 AssertIsTrue(Math.Abs(387 - rasterImage.OffsetX) < DefaultTolerance, "OffsetX rasterImage باید 387 باشد");

 AssertIsTrue(Math.Abs(379 - rasterImage.OffsetY) < DefaultTolerance, "OffsetY rasterImage باید 379 باشد");

 AssertIsTrue(Math.Abs(0 - rasterImage.Angle) < DefaultTolerance, "زاویه rasterImage باید 0 باشد");

 AssertIsTrue(Math.Abs(0 - rasterImage.LeftBottomShift) < DefaultTolerance, "LeftBottomShift rasterImage باید 0 باشد");

 AssertIsTrue(Math.Abs(0 - rasterImage.ImageRectangle.X) < DefaultTolerance, "ImageRectangle.X rasterImage باید 0 باشد");

 AssertIsTrue(Math.Abs(0 - rasterImage.ImageRectangle.Y) < DefaultTolerance, "ImageRectangle.Y rasterImage باید 0 باشد");

 AssertIsTrue(Math.Abs(10 - rasterImage.ImageRectangle.Width) < DefaultTolerance, "ImageRectangle.Width rasterImage باید 10 باشد");

 AssertIsTrue(Math.Abs(10 - rasterImage.ImageRectangle.Height) < DefaultTolerance, "ImageRectangle.Height rasterImage باید 10 باشد");

}

PSDNET-225. گرفتن ویژگی‌های فرمت‌بندی درونی متن لایه

     using (var psdImage = (PsdImage)Image.Load("فرمت_بندی_درونی.psd"))

            {

                List<ITextPortion> regularText = new List<ITextPortion>();

                List<ITextPortion> boldText = new List<ITextPortion>();

                List<ITextPortion> italicText = new List<ITextPortion>();

                var layers = psdImage.Layers;

                for (int index = 0; index < layers.Length; index++)

                {

                    var layer = layers[index];

                    if (!(layer is TextLayer))

                    {

                        continue;

                    }

                    var textLayer = (TextLayer)layer;

                    // گرفتن فونت‌هایی که شامل آنهاست در لایه متن

                    var fonts = textLayer.GetFonts();

                    var textPortions = textLayer.TextData.Items;

                    foreach (var textPortion in textPortions)

                    {

                        TextFontInfo font = fonts[textPortion.Style.FontIndex];

                        if (font != null)

                        {

                            switch (font.Style)

                            {

                                case FontStyle.Regular:

                                    regularText.Add(textPortion);

                                    break;

                                case FontStyle.Bold:

                                    boldText.Add(textPortion);

                                    break;

                                case FontStyle.Italic:

                                    italicText.Add(textPortion);

                                    break;

                                default:

                                    throw new ArgumentOutOfRangeException();

                            }

                        }

                    }

                }

            }

PSDNET-214. صادرات نادرست PSD به سایر فرمت‌ها در صورت داشتن افکت‌های لایه و لایه‌های تنظیم

     var loadOptions = new PsdLoadOptions();

   loadOptions.LoadEffectsResource = true;

   using (var image = (PsdImage)Image.Load("clip_shadow.psd", loadOptions))

   {

       image.Save("output.png", new PngOptions());

   }