Aspose.PSD voor .NET 24.4 - Releasenotities

Key Samenvatting Categorie
PSDNET-1871 [AI-formaat] Toevoegen van XObjectForm-bronverwerking Functie
PSDNET-1961 Toevoegen van Constructor voor de ShapeLayer Functie
PSDNET-1879 Oplossing voor conversie van Psd-bestand van RGB naar CMYK Fout
PSDNET-1966 Specifiek PSD-bestand kan niet geëxporteerd worden met Aspose.PSD Fout

Wijzigingen in openbare API

Toegevoegde API’s:

  • M:Aspose.PSD.FileFormats.Psd.PsdImage.AddShapeLayer

Verwijderde API’s:

  • Geen

Gebruik voorbeelden:

PSDNET-1871. [AI-formaat] Toevoegen van XObjectForm-bronverwerking

string bronbestand = Path.Combine(basisMap, "voorbeeld.ai");
string uitvoerBestandPad = Path.Combine(uitvoerMap, "voorbeeld.png");

using (AiImage afbeelding = (AiImage)Image.Load(bronbestand))
{
    afbeelding.Save(uitvoerBestandPad, new PngOptions());
}

PSDNET-1879. Oplossing voor conversie van Psd-bestand van RGB naar CMYK

// Controleer of psd-bestand geconverteerd naar CMYK + RLE 4 kanalen van psd-bestand in RGB + RLE 4 kanalen, echt 4 kanalen heeft 
// en HasTransparencyData == false.

string bronbestand = Path.Combine(basisMap, "frog_nosymb.psd");
string uitvoerBestand = Path.Combine(uitvoerMap, "frog_nosymb_output.psd");

using (PsdImage psdAfbeelding = (PsdImage)Image.Load(bronbestand))
{
    psdAfbeelding.HasTransparencyData = false;

    PsdOptions psdOpties = new PsdOptions(psdAfbeelding)
    {
        ColorMode = ColorModes.Cmyk,
        CompressionMethod = CompressionMethod.RLE,
        ChannelsCount = 4,
    };

    psdAfbeelding.Save(uitvoerBestand, psdOpties);
}

using (PsdImage psdAfbeelding = (PsdImage)Image.Load(uitvoerBestand))
{
    AssertAreEqual(false, psdAfbeelding.HasTransparencyData);
    AssertAreEqual((ushort)4, psdAfbeelding.Layers[0].ChannelsCount);
}

void AssertAreEqual(object verwacht, object daadwerkelijk, string bericht = null)
{
    if (!object.Equals(verwacht, daadwerkelijk))
    {
        throw new Exception(bericht ?? "Objecten zijn niet gelijk.");
    }
}

PSDNET-1961. Toevoegen van Constructor voor de ShapeLayer

string uitvoerBestand = Path.Combine(uitvoerMap, "AddShapeLayer_output.psd");

const int ImgToPsdRatio = 256 * 65535;

using (PsdImage nieuwPsd = new PsdImage(600, 400))
{
    ShapeLayer laag = nieuwPsd.AddShapeLayer();

    var nieuweVorm = GenereerNieuweVorm(nieuwPsd.Size);
    List<IPathShape> nieuweVormen = new List<IPathShape>();
    nieuweVormen.Add(nieuweVorm);
    laag.Path.SetItems(nieuweVormen.ToArray());

    laag.Update();

    nieuwPsd.Save(uitvoerBestand);
}

using (PsdImage afbeelding = (PsdImage)Image.Load(uitvoerBestand))
{
    AssertAreEqual(2, afbeelding.Layers.Length);

    ShapeLayer vormLaag = afbeelding.Layers[1] as ShapeLayer;
    ColorFillSettings interneVulling = vormLaag.Fill as ColorFillSettings;
    IStrokeSettings lijnstijlInstellingen = vormLaag.Stroke;
    ColorFillSettings lijnstijlVulling = vormLaag.Stroke.Fill as ColorFillSettings;

    AssertAreEqual(1, vormLaag.Path.GetItems().Length); // 1 Vorm
    AssertAreEqual(3, vormLaag.Path.GetItems()[0].GetItems().Length); // 3 knopen in een vorm

    AssertAreEqual(-16127182, interneVulling.Color.ToArgb()); // ff09eb32

    AssertAreEqual(7.41, lijnstijlInstellingen.Size);
    AssertAreEqual(false, lijnstijlInstellingen.Enabled);
    AssertAreEqual(StrokePosition.Center, lijnstijlInstellingen.LineAlignment);
    AssertAreEqual(LineCapType.ButtCap, lijnstijlInstellingen.LineCap);
    AssertAreEqual(LineJoinType.MiterJoin, lijnstijlInstellingen.LineJoin);
    AssertAreEqual(-16777216, lijnstijlVulling.Color.ToArgb()); // ff000000
}

PathShape GenereerNieuweVorm(Size afbeeldingsgrootte)
{
    var nieuweVorm = new PathShape();

    PointF punt1 = new PointF(20, 100);
    PointF punt2 = new PointF(200, 100);
    PointF punt3 = new PointF(300, 10);

    BezierKnotRecord[] BezierKnopen = new BezierKnotRecord[]
    {
         new BezierKnotRecord()
         {
             IsLinked = true,
             Points = new Point[3]
                      {
                          PointFToResourcePoint(punt1, afbeeldingsgrootte),
                          PointFToResourcePoint(punt1, afbeeldingsgrootte),
                          PointFToResourcePoint(punt1, afbeeldingsgrootte),
                      }
         },
         new BezierKnotRecord()
         {
             IsLinked = true,
             Points = new Point[3]
                      {
                          PointFToResourcePoint(punt2, afbeeldingsgrootte),
                          PointFToResourcePoint(punt2, afbeeldingsgrootte),
                          PointFToResourcePoint(punt2, afbeeldingsgrootte),
                      }
         },
         new BezierKnotRecord()
         {
             IsLinked = true,
             Points = new Point[3]
                      {
                          PointFToResourcePoint(punt3, afbeeldingsgrootte),
                          PointFToResourcePoint(punt3, afbeeldingsgrootte),
                          PointFToResourcePoint(punt3, afbeeldingsgrootte),
                      }
         },
    };

    nieuweVorm.SetItems(BezierKnopen);

    return nieuweVorm;
}

Point PointFToResourcePoint(PointF punt, Size afbeeldingsgrootte)
{
    return new Point(
        (int)Math.Round(punt.Y * (ImgToPsdRatio / afbeeldingsgrootte.Height)),
        (int)Math.Round(punt.X * (ImgToPsdRatio / afbeeldingsgrootte.Width)));
}

void AssertAreEqual(object verwacht, object daadwerkelijk, string bericht = null)
{
    if (!object.Equals(verwacht, daadwerkelijk))
    {
        throw new Exception(bericht ?? "Objecten zijn niet gelijk.");
    }
}

PSDNET-1966. Specifiek PSD-bestand kan niet geëxporteerd worden met Aspose.PSD

string bronbestand = Path.Combine(basisMap, "1966source.psd");
string uitvoerPng = Path.Combine(uitvoerMap, "output.png");

using (var psdAfbeelding = (PsdAfbeelding)Image.Load(bronbestand, new PsdLoadOptions() { LoadEffectsResource = true }))
{
    psdAfbeelding.Save(uitvoerPng, new PngOptions());
}