Aspose.PSD dla .NET 18.12 - Notatki dotyczące wydania
Klucz | Podsumowanie | Kategoria |
---|---|---|
PSDNET-76 | Obsługa warstwy kreślenia | Nowa funkcja |
PSDNET-83 | Obsługa efektu gradientu | Nowa funkcja |
PSDNET-84 | Obsługa efektu wzoru | Nowa funkcja |
PSDNET-89 | Dodanie możliwości dodania nowej warstwy regularnej do obiektu PsdImage | Nowa funkcja |
PSDNET-93 | Po aktualizacji zawartości warstwy tekstowej znakiem \ (backslash), plik wynikowy nie można otworzyć w programie Photoshop | Błąd |
PSDNET-39 | Uszkodzone obrazy po eksporcie z nadmiernymi danymi obrazu w trybie kolorów CMYK | Błąd |
PSDNET-52 | Problem z obracaniem w formacie PSD | Błąd |
PSDNET-88 | Problem z metodami przycinania w Aspose.Psd | Błąd |
PSDNET-91 | Zastosuj zmiany w Aspose.Imaging do Aspose.PSD | Udoskonalenie |
Zmiany w API publicznym
Metoda Aspose.PSD.FileFormats.Psd.PsdImage.AddRegularLayer
Klasa Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException
Metoda Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException.#ctor(System.String)
Metoda Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException.#ctor(System.String,System.Exception)
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings.#ctor
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings.FillType
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings.Color
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings.FillType
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Color
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Gradient
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Pattern
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.Color
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.Location
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.MedianPointLocation
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Color
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AlignWithLayer
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Dither
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Reverse
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Angle
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.GradientType
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.HorizontalOffset
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.VerticalOffset
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.FillType
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.ColorPoints
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.TransparencyPoints
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AddColorPoint
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AddTransparencyPoint
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.RemoveTransparencyPoint(Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint)
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.RemoveColorPoint(Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint)
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.Opacity
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.Location
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.MedianPointLocation
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.FillType
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Linked
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Scale
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PointType
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PatternName
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PatternId
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.HorizontalOffset
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.VerticalOffset
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.BlendMode
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.IsVisible
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.FillSettings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.Opacity
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Linear
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Radial
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Angle
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Reflected
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Diamond
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.ShapeBurst
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.#ctor
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.#ctor(System.Byte[])
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternData
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternId
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Name
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Height
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Width
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.ImageMode
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Version
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternLength
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Signature
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Key
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Length
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PsdVersion
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.SetPattern(System.Int32[],Aspose.PSD.Rectangle)
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Save(Aspose.PSD.StreamContainer,System.Int32)
Pole/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.TypeToolKey
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.#ctor
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.GenerateLfx2ResourceNodes
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.Settings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.BlendMode
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.IsVisible
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.Opacity
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Color
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AddGradientOverlay
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AddPatternOverlay
Metoda Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.GenerateLfx2ResourceNodes(System.String,Aspose.PSD.Color,System.String,System.String,System.Double,System.Boolean,Aspose.PSD.PointF)
Klasa Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.Settings
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.BlendMode
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.IsVisible
Właściwość Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.Opacity
Przykłady użycia:
PSDNET-76. Obsługa warstw kreślenia
1) Typ wypełnienia - Wzorzec
// Efekt kreślenia. Typ wypełnienia - Wzorzec. Przykład
string nazwaPlikuZrodlowego = "Stroke.psd";
string exportPath = "StrokePatternChanged.psd";
var loadOptions = new PsdLoadOptions()
{
LoadEffectsResource = true
};
// Przygotowanie nowych danych
var nowyWzorzec = new int[]
{
Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),
Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),
Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),
Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),
};
var noweGraniceWzorca = new Rectangle(0, 0, 4, 4);
var guid = Guid.NewGuid();
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego, loadOptions))
{
var wzorzecKreślenia = (StrokeEffect)im.Layers[3].BlendingOptions.Effects[0];
Assert.AreEqual(BlendMode.Normal, wzorzecKreślenia.BlendMode);
Assert.AreEqual(255, wzorzecKreślenia.Opacity);
Assert.AreEqual(true, wzorzecKreślenia.IsVisible);
var fillSettings = (PatternFillSettings)wzorzecKreślenia.FillSettings;
Assert.AreEqual(FillType.Pattern, fillSettings.FillType);
wzorzecKreślenia.Opacity = 127;
wzorzecKreślenia.BlendMode = BlendMode.Color;
PattResource zasób;
foreach (var globalLayerResource in im.GlobalLayerResources)
{
if (globalLayerResource is PattResource)
{
zasób = (PattResource)globalLayerResource;
zasób.PatternId = guid.ToString();
zasób.Name = "$$$/Presets/Patterns/HorizontalLine1=Horizontal Line 9\0";
zasób.SetPattern(nowyWzorzec, noweGraniceWzorca);
}
}
((PatternFillSettings)wzorzecKreślenia.FillSettings).PatternName = "$$$/Presets/Patterns/HorizontalLine1=Horizontal Line 9\0";
((PatternFillSettings)wzorzecKreślenia.FillSettings).PatternId = guid.ToString() + "\0";
im.Save(exportPath);
}
// Plik testowy po edycji
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego, loadOptions))
{
var wzorzecKreślenia = (StrokeEffect)im.Layers[3].BlendingOptions.Effects[0];
PattResource zasób = null;
foreach (var globalLayerResource in im.GlobalLayerResources)
{
if (globalLayerResource is PattResource)
{
zasób = (PattResource)globalLayerResource;
}
}
if (zasób == null)
{
throw new Exception("Nie znaleziono zasobu PattResource");
}
// Sprawdź dane wzorca
Assert.AreEqual(nowyWzorzec, zasób.PatternData);
Assert.AreEqual(noweGraniceWzorca, new Rectangle(0, 0, zasób.Width, zasób.Height));
Assert.AreEqual(guid.ToString(), zasób.PatternId);
Assert.AreEqual(BlendMode.Color, wzorzecKreślenia.BlendMode);
Assert.AreEqual(127, wzorzecKreślenia.Opacity);
Assert.AreEqual(true, wzorzecKreślenia.IsVisible);
var fillSettings = (PatternFillSettings)wzorzecKreślenia.FillSettings;
Assert.AreEqual(FillType.Pattern, fillSettings.FillType);
}
Typ wypełnienia - Gradient
// Efekt kreślenia. Typ wypełnienia - Gradient. Przykład
string nazwaPlikuZrodlowego = "Stroke.psd";
string exportPath = "StrokeGradientChanged.psd";
var loadOptions = new PsdLoadOptions()
{
LoadEffectsResource = true
};
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego, loadOptions))
{
var gradientKreślenia = (StrokeEffect)im.Layers[2].BlendingOptions.Effects[0];
Assert.AreEqual(BlendMode.Normal, gradientKreślenia.BlendMode);
Assert.AreEqual(255, gradientKreślenia.Opacity);
Assert.AreEqual(true, gradientKreślenia.IsVisible);
var fillSettings = (GradientFillSettings)gradientKreślenia.FillSettings;
Assert.AreEqual(Color.Black, fillSettings.Color);
Assert.AreEqual(FillType.Gradient, fillSettings.FillType);
Assert.AreEqual(true, fillSettings.AlignWithLayer);
Assert.AreEqual(GradientType.Linear, fillSettings.GradientType);
Assert.IsTrue(Math.Abs(90 - fillSettings.Angle) < 0.001, "Zły kąt");
Assert.AreEqual(false, fillSettings.Dither);
Assert.IsTrue(Math.Abs(0 - fillSettings.HorizontalOffset) < 0.001, "Zły przesunięcie poziome");
Assert.IsTrue(Math.Abs(0 - fillSettings.VerticalOffset) < 0.001, "Zły przesunicenie pionowe");
Assert.AreEqual(false, fillSettings.Reverse);
// Punkty kolorów
var punktyKolorów = fillSettings.ColorPoints;
Assert.AreEqual(2, punktyKolorów.Length);
Assert.AreEqual(Color.Black, punktyKolorów[0].Color);
Assert.AreEqual(0, punktyKolorów[0].Location);
Assert.AreEqual(50, punktyKolorów[0].MedianPointLocation);
Assert.AreEqual(Color.White, punktyKolorów[1].Color);
Assert.AreEqual(4096, punktyKolorów[1].Location);
Assert.AreEqual(50, punktyKolorów[1].MedianPointLocation);
// Punkty przejrzystości
var punktyPrzejrzystości = fillSettings.TransparencyPoints;
Assert.AreEqual(2, punktyPrzejrzystości.Length);
Assert.AreEqual(0, punktyPrzejrzystości[0].Location);
Assert.AreEqual(50, punktyPrzejrzystości[0].MedianPointLocation);
Assert.AreEqual(100, punktyPrzejrzystości[0].Opacity);
Assert.AreEqual(4096, punktyPrzejrzystości[1].Location);
Assert.AreEqual(50, punktyPrzejrzystości[1].MedianPointLocation);
Assert.AreEqual(100, punktyPrzejrzystości[1].Opacity);
// Test edycji
fillSettings.Color = Color.Green;
gradientKreślenia.Opacity = 127;
gradientKreślenia.BlendMode = BlendMode.Color;
fillSettings.AlignWithLayer = false;
fillSettings.GradientType = GradientType.Radial;
fillSettings.Angle = 45;
fillSettings.Dither = true;
fillSettings.HorizontalOffset = 15;
fillSettings.VerticalOffset = 11;
fillSettings.Reverse = true;
// Dodanie nowego punktu koloru
var punktKoloru = fillSettings.AddColorPoint();
punktKoloru.Color = Color.Green;
punktKoloru.Location = 4096;
punktKoloru.MedianPointLocation = 75;
// Zmiana lokalizacji poprzedniego punktu
fillSettings.ColorPoints[1].Location = 1899;
// Dodanie nowego punktu przejrzystości
var punktPrzejrzystości = fillSettings.AddTransparencyPoint();
punktPrzejrzystości.Opacity = 25;
punktPrzejrzystości.MedianPointLocation = 25;
punktPrzejrzystości.Location = 4096;
// Zmiana lokalizacji poprzedniego punktu przejrzystości
fillSettings.TransparencyPoints[1].Location = 2411;
im.Save(exportPath);
}
// Test pliku po edycji
using (var im = (PsdImage)Image.Load(exportPath, loadOptions))
{
var gradientKreślenia = (StrokeEffect)im.Layers[2].BlendingOptions.Effects[0];
Assert.AreEqual(BlendMode.Color, gradientKreślenia.BlendMode);
Assert.AreEqual(127, gradientKreślenia.Opacity);
Assert.AreEqual(true, gradientKreślenia.IsVisible);
var fillSettings = (GradientFillSettings)gradientKreślenia.FillSettings;
Assert.AreEqual(Color.Green, fillSettings.Color);
Assert.AreEqual(FillType.Gradient, fillSettings.FillType);
// Sprawdzenie punktów kolorów
Assert.AreEqual(3, fillSettings.ColorPoints.Length);
var punkt = fillSettings.ColorPoints[0];
Assert.AreEqual(50, punkt.MedianPointLocation);
Assert.AreEqual(Color.Black, punkt.Color);
Assert.AreEqual(0, punkt.Location);
punkt = fillSettings.ColorPoints[1];
Assert.AreEqual(50, punkt.MedianPointLocation);
Assert.AreEqual(Color.White, punkt.Color);
Assert.AreEqual(1899, punkt.Location);
punkt = fillSettings.ColorPoints[2];
Assert.AreEqual(75, punkt.MedianPointLocation);
Assert.AreEqual(Color.Green, punkt.Color);
Assert.AreEqual(4096, punkt.Location);
// Sprawdzenie punktów przejrzystości
Assert.AreEqual(3, fillSettings.TransparencyPoints.Length);
var punktPrzejrzystości = fillSettings.TransparencyPoints[0];
Assert.AreEqual(50, punktPrzejrzystości.MedianPointLocation);
Assert.AreEqual(100, punktPrzejrzystości.Opacity);
Assert.AreEqual(0, punktPrzejrzystości.Location);
punktPrzejrzystości = fillSettings.TransparencyPoints[1];
Assert.AreEqual(50, punktPrzejrzystości.MedianPointLocation);
Assert.AreEqual(100, punktPrzejrzystości.Opacity);
Assert.AreEqual(2411, punktPrzejrzystości.Location);
punktPrzejrzystości = fillSettings.TransparencyPoints[2];
Assert.AreEqual(25, punktPrzejrzystości.MedianPointLocation);
Assert.AreEqual(25, punktPrzejrzystości.Opacity);
Assert.AreEqual(4096, punktPrzejrzystości.Location);
}
PSDNET-84. Obsługa efektu wzoru.
// Efekt nakładania wzoru. Przykład
string nazwaPlikuZrodlowego = "PatternOverlay.psd";
string exportPath = "PatternOverlayChanged.psd";
var nowyWzorzec = new int[]
{
Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),
Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),
};
var noweGraniceWzorca = new Rectangle(0, 0, 4, 2);
var guid = Guid.NewGuid();
var nowaNazwaWzorca = "$$$/Presets/Patterns/Pattern=Some new pattern name\0";
var loadOptions = new PsdLoadOptions()
{
LoadEffectsResource = true
};
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego, loadOptions))
{
var wzorzecNakładania = (PatternOverlayEffect)im.Layers[1].BlendingOptions.Effects[0];
Assert.AreEqual(BlendMode.Normal, wzorzecNakładania.BlendMode);
Assert.AreEqual(127, wzorzecNakładania.Opacity);
Assert.AreEqual(true, wzorzecNakładania.IsVisible);
var settings = wzorzecNakładania.Settings;
Assert.AreEqual(Color.Empty, settings.Color);
Assert.AreEqual(FillType.Pattern, settings.FillType);
Assert.AreEqual("85163837-eb9e-5b43-86fb-e6d5963ea29a\0", settings.PatternId);
Assert.AreEqual("$$$/Presets/Patterns/OpticalSquares=Optical Squares\0", settings.PatternName);
Assert.AreEqual(null, settings.PointType);
Assert.AreEqual(100, settings.Scale);
Assert.AreEqual(false, settings.Linked);
Assert.IsTrue(Math.Abs(0 - settings.HorizontalOffset) < 0.001, "Złe przesunięcie poziome");
Assert.IsTrue(Math.Abs(0 - settings.VerticalOffset) < 0.001, "Złe przesunięcie pionowe");
// Test edycji
settings.Color = Color.Green;
wzorzecNakładania.Opacity = 193;
wzorzecNakładania.BlendMode = BlendMode.Difference;
settings.HorizontalOffset = 15;
settings.VerticalOffset = 11;
PattResource zasób;
foreach (var globalLayerResource in im.GlobalLayerResources)
{
if (globalLayerResource is PattResource)
{
zasób = (PattResource)globalLayerResource;
zasób.PatternId = guid.ToString();
zasób.Name = nowaNazwaWzorca;
zasób.SetPattern(nowyWzorzec, noweGraniceWzorca);
}
}
settings.PatternName = nowaNazwaWzorca;
settings.PatternId = guid.ToString() + "\0";
im.Save(exportPath);
}
// Test pliku po edycji
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego, loadOptions))
{
var wzorzecNakładania = (PatternOverlayEffect)im.Layers[1].BlendingOptions.Effects[0];
Assert.AreEqual(BlendMode.Difference, wzorzecNakładania.BlendMode);
Assert.AreEqual(193, wzorzecNakładania.Opacity);
Assert.AreEqual(true, wzorzecNakładania.IsVisible);
var fillSettings = wzorzecNakładania.Settings;
Assert.AreEqual(Color.Empty, fillSettings.Color);
Assert.AreEqual(FillType.Pattern, fillSettings.FillType);
PattResource zasób = null;
foreach (var globalLayerResource in im.GlobalLayerResources)
{
if (globalLayerResource is PattResource)
{
zasób = (PattResource)globalLayerResource;
}
}
if (zasób == null)
{
throw new Exception("Nie znaleziono zasobu PattResource");
}
// Sprawdź dane wzorca
Assert.AreEqual(nowyWzorzec, zasób.PatternData);
Assert.AreEqual(noweGraniceWzorca, new Rectangle(0, 0, zasób.Width, zasób.Height));
Assert.AreEqual(guid.ToString(), zasób.PatternId);
}
PSDNET-89. Dodanie możliwości dodania nowej warstwy regularnej do obiektu PsdImage.
// Dodanie możliwości dodania nowej warstwy regularnej do obiektu PsdImage
string nazwaPlikuZrodlowego = "OneLayer.psd";
string exportPath = "OneLayerEdited.psd";
string exportPathPng = "OneLayerEdited.png";
using (var im = (PsdImage)Image.Load(nazwaPlikuZrodlowego))
{
// Przygotowanie dwóch tablic int
var data1 = new int[2500];
var data2 = new int[2500];
var rect1 = new Rectangle(0, 0, 50, 50);
var rect2 = new Rectangle(0, 0, 100, 25);
for (int i = 0; i < 2500; i++)
{
data1[i] = -10000000;
data2[i] = -10000000;
}
var warstwa1 = im.AddRegularLayer();
warstwa1.Left = 25;
warstwa1.Top = 25;
warstwa1.Right = 75;
warstwa1.Bottom = 75;
warstwa1.SaveArgb32Pixels(rect1, data1);
var warstwa2 = im.AddRegularLayer();
warstwa2.Left = 25;
warstwa2.Top = 150;
warstwa2.Right = 125;
warstwa2.Bottom = 175;
warstwa2.SaveArgb32Pixels(rect2, data2);
// Zapisz psd
im.Save(exportPath, new PsdOptions());
// Zapisz png
im.Save(exportPathPng, new PngOptions());
}
PSDNET-93. Po aktualizacji zawartości warstwy tekstowej znakiem \ (backslash), plik wynikowy nie można otworzyć w programie Photoshop.
using (
var obrazek =
Image.Load(
"przykład.psd"))
{
if (!(obrazek is PsdImage)) return;
var psdObrazek = (PsdImage)obrazek;
var warstwy = psdObrazek.Layers;
for (var indeks = warstwy.Length - 1; indeks >= 0; indeks--)
{
var warstwa = warstwy[indeks];
if (!(warstwa is TextLayer)) continue;
var tekstowaWarstwa = (TextLayer)warstwa;
tekstowaWarstwa.UpdateText("展 就");
}
var opcjeObrazu = new PsdOptions(psdObrazek);
psdObrazek.Save("wynik.psd", opcjeObrazu);
}