Zarządzanie ramkami obrazów w prezentacjach przy użyciu JavaScript

Wprowadzenie

Ramka obrazu jest kształtem, który zawiera obraz — jest jak zdjęcie w ramce.

Możesz dodać obraz do slajdu za pomocą ramki obrazu. W ten sposób możesz formatować obraz, formatując ramkę obrazu.

Utworzenie ramki obrazu

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Utwórz obiekt PPImage, dodając obraz do ImagesCollection powiązanej z obiektem prezentacji, który będzie używany do wypełnienia kształtu.
  4. Określ szerokość i wysokość obrazu.
  5. Utwórz PictureFrame na podstawie szerokości i wysokości obrazu, korzystając z metody addPictureFrame udostępnionej przez obiekt kształtu powiązany z odwołanym slajdem.
  6. Dodaj ramkę obrazu (zawierającą obraz) do slajdu.
  7. Zapisz zmodyfikowaną prezentację jako plik PPTX.

Ten kod JavaScript pokazuje, jak utworzyć ramkę obrazu:

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd
    var sld = pres.getSlides().get_Item(0);
    // Tworzy instancję klasy Image
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Dodaje ramkę obrazu o takiej samej wysokości i szerokości jak obraz
    sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Zapisuje plik PPTX na dysku
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Ramki obrazu umożliwiają szybkie tworzenie slajdów prezentacji na podstawie obrazów. Gdy połączysz ramkę obrazu z opcjami zapisu Aspose.Slides, możesz manipulować operacjami wejścia/wyjścia, aby konwertować obrazy z jednego formatu na inny.

Utworzenie ramki obrazu ze skalą względną

Poprzez zmianę skalowania względnego obrazu możesz utworzyć bardziej złożoną ramkę obrazu.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Dodaj obraz do kolekcji obrazów prezentacji.
  4. Utwórz obiekt PPImage, dodając obraz do ImagesCollection powiązanej z obiektem prezentacji, który będzie używany do wypełnienia kształtu.
  5. Określ względną szerokość i wysokość obrazu w ramce obrazu.
  6. Zapisz zmodyfikowaną prezentację jako plik PPTX.

Ten kod JavaScript pokazuje, jak utworzyć ramkę obrazu ze skalą względną:

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd
    var sld = pres.getSlides().get_Item(0);
    // Tworzy instancję klasy Image
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Dodaje ramkę obrazu o wysokości i szerokości równych obrazowi
    var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Ustawia względną skalę wysokości i szerokości
    pf.setRelativeScaleHeight(0.8);
    pf.setRelativeScaleWidth(1.35);
    // Zapisuje plik PPTX na dysku
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Wyodrębnianie obrazów rastrowych z ramek obrazu

Możesz wyodrębnić obrazy rastrowe z obiektów PictureFrame i zapisać je w formatach PNG, JPG i innych. Poniższy przykład kodu demonstruje, jak wyodrębnić obraz z dokumentu „sample.pptx” i zapisać go w formacie PNG.

var presentation = new aspose.slides.Presentation("sample.pptx");
try {
    var firstSlide = presentation.getSlides().get_Item(0);
    var firstShape = firstSlide.getShapes().get_Item(0);
    if (java.instanceOf(firstShape, "com.aspose.slides.IPictureFrame")) {
        var pictureFrame = firstShape;
        try {
            var slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
            slideImage.save("slide_1_shape_1.png", aspose.slides.ImageFormat.Png);
        } finally {
            if (slideImage != null) {
                slideImage.dispose();
            }
        }
    }
} catch (e) {console.log(e);
} finally {
    presentation.dispose();
}

Wyodrębnianie obrazów SVG z ramek obrazu

Kiedy prezentacja zawiera grafikę SVG umieszczoną wewnątrz kształtów PictureFrame, Aspose.Slides for Node.js via Java pozwala pobrać oryginalne obrazy wektorowe w pełnej jakości. Przeglądając kolekcję kształtów slajdu, możesz zidentyfikować każdy PictureFrame, sprawdzić, czy podlegający mu PPImage zawiera treść SVG, a następnie zapisać ten obraz na dysk lub do strumienia w natywnym formacie SVG.

Poniższy przykład kodu demonstruje, jak wyodrębnić obraz SVG z ramki obrazu:

var presentation = new aspose.slides.Presentation("sample.pptx");

try {
    var slide = presentation.getSlides().get_Item(0);
    var shape = slide.getShapes().get_Item(0);

    if (java.instanceOf(shape, "com.aspose.slides.IPictureFrame")) {
        const svgImage = shape.getPictureFormat().getPicture().getImage().getSvgImage();

        if (svgImage) {
            fs.writeFileSync("output.svg", svgImage.getSvgData());
        }
    }
} catch (e) {
    console.log(e);
} finally {
    presentation.dispose();
}

Uzyskanie przezroczystości obrazu

Aspose.Slides umożliwia uzyskanie efektu przezroczystości zastosowanego do obrazu. Ten kod JavaScript demonstruje operację:

var presentation = new aspose.slides.Presentation("Test.pptx");
var pictureFrame = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var i = 0; i < imageTransform.size(); i++) {
    var effect = imageTransform.get_Item(i);
    if (java.instanceOf(effect, "com.aspose.slides.IAlphaModulateFixed")) {
        var alphaModulateFixed = effect;
        var transparencyValue = 100 - alphaModulateFixed.getAmount();
        console.log("Picture transparency: " + transparencyValue);
    }
}

Uzyskanie jasności i kontrastu obrazu

Aspose.Slides umożliwia uzyskanie efektu jasności i kontrastu zastosowanego do obrazu. Klasa Luminance reprezentuje tę transformację obrazu.

Ten kod JavaScript demonstruje, jak uzyskać ustawienia jasności i kontrastu z ramki obrazu:

const presentation = new aspose.slides.Presentation("sample.pptx");

try {
    const slide = presentation.getSlides().get_Item(0);
    const shape = slide.getShapes().get_Item(0);
    const pictureFrame = shape;

    const imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    for (let i = 0; i < imageTransform.size(); i++) {
        const effect = imageTransform.get_Item(i);
        if (java.instanceOf(effect, "com.aspose.slides.Luminance")) {
            const luminance = effect.getEffective();
            const brightness = luminance.getBrightness();
            const contrast = luminance.getContrast();

            console.log("Brightness: " + brightness);
            console.log("Contrast: " + contrast);
        }
    }
} finally {
    presentation.dispose();
}

Formatowanie ramki obrazu

Aspose.Slides oferuje wiele opcji formatowania, które można zastosować do ramki obrazu. Korzystając z tych opcji, możesz dostosować ramkę obrazu do konkretnych wymagań.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Utwórz obiekt PPImage, dodając obraz do ImagesCollection powiązanej z obiektem prezentacji, który będzie używany do wypełnienia kształtu.
  4. Określ szerokość i wysokość obrazu.
  5. Utwórz PictureFrame na podstawie szerokości i wysokości obrazu, korzystając z metody addPictureFrame udostępnionej przez obiekt Shapes powiązany z odwołanym slajdem.
  6. Dodaj ramkę obrazu (zawierającą obraz) do slajdu.
  7. Ustaw kolor linii ramki obrazu.
  8. Ustaw szerokość linii ramki obrazu.
  9. Obróć ramkę obrazu, podając wartość dodatnią lub ujemną.
    • Wartość dodatnia obraca obraz zgodnie z ruchem wskazówek zegara.
    • Wartość ujemna obraca obraz przeciwnie do ruchu wskazówek zegara.
  10. Dodaj ramkę obrazu (zawierającą obraz) do slajdu.
  11. Zapisz zmodyfikowaną prezentację jako plik PPTX.

Ten kod JavaScript demonstruje proces formatowania ramki obrazu:

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd
    var sld = pres.getSlides().get_Item(0);
    // Tworzy instancję klasy Image
    var imgx = pres.getImages().addImage(java.newInstanceSync("java.io.FileInputStream", java.newInstanceSync("java.io.File", "asp1.jpg")));
    // Dodaje ramkę obrazu o wysokości i szerokości równych obrazowi
    var pf = sld.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
    // Zastosowuje formatowanie do PictureFrameEx
    pf.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLUE"));
    pf.getLineFormat().setWidth(20);
    pf.setRotation(45);
    // Zapisuje plik PPTX na dysku
    pres.save("RectPicFrame.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Dodawanie obrazu jako linku

Aby zmniejszyć rozmiar prezentacji, możesz dodawać obrazy (lub filmy) za pomocą linków zamiast osadzać pliki bezpośrednio w prezentacji. Ten kod JavaScript pokazuje, jak dodać obraz i wideo do miejsca wstawiania:

var presentation = new aspose.slides.Presentation("input.pptx");
try {
    var shapesToRemove = java.newInstanceSync("java.util.ArrayList");
    var shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
    for (var i = 0; i < shapesCount; i++) {
        var autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
        if (autoShape.getPlaceholder() == null) {
            continue;
        }
        switch (autoShape.getPlaceholder().getType()) {
            case aspose.slides.PlaceholderType.Picture :
                var pictureFrame = presentation.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), null);
                pictureFrame.getPictureFormat().getPicture().setLinkPathLong("https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
                shapesToRemove.add(autoShape);
                break;
            case aspose.slides.PlaceholderType.Media :
                var videoFrame = presentation.getSlides().get_Item(0).getShapes().addVideoFrame(autoShape.getX(), autoShape.getY(), autoShape.getWidth(), autoShape.getHeight(), "");
                videoFrame.getPictureFormat().getPicture().setLinkPathLong("https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg");
                videoFrame.setLinkPathLong("https://youtu.be/t_1LYZ102RA");
                shapesToRemove.add(autoShape);
                break;
        }
    }
    for (var i = 0; i < shapesToRemove.length; i++) {
        var shape = shapesToRemove.get_Item(i);
        presentation.getSlides().get_Item(0).getShapes().remove(shape);
    }
    presentation.save("output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Kadrowanie obrazu

Ten kod JavaScript pokazuje, jak przyciąć istniejący obraz na slajdzie:

var pres = new aspose.slides.Presentation();
// Tworzy nowy obiekt obrazu
try {
    var picture;
    var image = aspose.slides.Images.fromFile(imagePath);
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    // Dodaje ramkę obrazu do slajdu
    var picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 100, 100, 420, 250, picture);
    // Przycina obraz (wartości procentowe)
    picFrame.getPictureFormat().setCropLeft(23.6);
    picFrame.getPictureFormat().setCropRight(21.5);
    picFrame.getPictureFormat().setCropTop(3);
    picFrame.getPictureFormat().setCropBottom(31);
    // Zapisuje wynik
    pres.save(outPptxFile, aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Usuwanie przyciętych obszarów obrazu w ramce

Jeśli chcesz usunąć przycięte obszary obrazu zawartego w ramce, możesz użyć metody deletePictureCroppedAreas(). Metoda ta zwraca przycięty obraz lub oryginalny obraz, jeśli przycinanie nie jest konieczne.

Ten kod JavaScript demonstruje operację:

var presentation = new aspose.slides.Presentation("PictureFrameCrop.pptx");
try {
    var slide = presentation.getSlides().get_Item(0);
    // Pobiera ramkę obrazu z pierwszego slajdu
    var picFrame = slide.getShapes().get_Item(0);
    // Usuwa przycięte obszary obrazu w ramce obrazu i zwraca przycięty obraz
    var croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
    // Zapisuje wynik
    presentation.save("PictureFrameDeleteCroppedAreas.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

Kompresja obrazów

Możesz skompresować obraz w prezentacji, używając metody PictureFillFormat.compressImage. Metoda ta zmniejsza rozmiar obrazu w oparciu o rozmiar kształtu i podaną rozdzielczość, z opcją usunięcia przyciętych obszarów.

Działa podobnie jak funkcja PowerPoint Format obrazu → Kompresuj obrazy → Rozdzielczość.

Poniższe przykłady JavaScript demonstrują, jak skompresować obraz w prezentacji, określając docelową rozdzielczość i opcjonalnie usuwając przycięte obszary:

const presentation = new aspose.slides.Presentation("demo.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    const pictureFrame = slide.getShapes().get_Item(0);

    // Kompresuje obraz z docelową rozdzielczością 150 DPI (rozwiązanie internetowe) i usuwa przycięte obszary.
    const result = pictureFrame.getPictureFormat().compressImage(true, aspose.slides.PicturesCompression.Dpi150);

    // Sprawdza wynik kompresji.
    if (result) {
        console.log("Image successfully compressed.");
    } else {
        console.log("Image compression failed or no changes were necessary.");
    }

    presentation.save("CompressedImage.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Lub używając innej predefiniowanej wartości DPI:

const presentation = new aspose.slides.Presentation("demo.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    const pictureFrame = slide.getShapes().get_Item(0);

    // Kompresuje obraz do 96 DPI (rozdzielczość e‑mail), usuwając przycięte obszary.
    pictureFrame.getPictureFormat().compressImage(true, aspose.slides.PicturesCompression.Dpi96);

    presentation.save("CompressedImage.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Zablokowanie proporcji

Jeśli chcesz, aby kształt zawierający obraz zachował proporcje po zmianie wymiarów obrazu, możesz użyć metody setAspectRatioLocked do ustawienia opcji Lock Aspect Ratio.

Ten kod JavaScript pokazuje, jak zablokować proporcje kształtu:

var pres = new aspose.slides.Presentation("pres.pptx");
try {
    var layout = pres.getLayoutSlides().getByType(aspose.slides.SlideLayoutType.Custom);
    var emptySlide = pres.getSlides().addEmptySlide(layout);
    var picture;
    var image = aspose.slides.Images.fromFile("image.png");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    var pictureFrame = emptySlide.getShapes().addPictureFrame(aspose.slides.ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
    // ustaw kształt tak, aby zachować proporcje przy zmianie rozmiaru
    pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Użycie właściwości StretchOff

Korzystając z metod setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight i setStretchOffsetBottom klasy PictureFillFormat, możesz określić prostokąt wypełnienia.

Gdy rozciąganie jest określone dla obrazu, źródłowy prostokąt jest skalowany, aby pasował do podanego prostokąta wypełnienia. Każda krawędź prostokąta wypełnienia jest definiowana przez procentowy offset od odpowiadającej krawędzi ramki ograniczającej kształt. Dodatni procent określa wcięcie, a ujemny – wystawienie.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj referencję do slajdu za pomocą jego indeksu.
  3. Dodaj prostokąt AutoShape.
  4. Utwórz obraz.
  5. Ustaw typ wypełnienia kształtu.
  6. Ustaw tryb wypełnienia obrazu kształtu.
  7. Dodaj ustawiony obraz do wypełnienia kształtu.
  8. Określ offsety obrazu względem odpowiadających krawędzi ramki ograniczającej kształt.
  9. Zapisz zmodyfikowaną prezentację jako plik PPTX.

Ten kod JavaScript demonstruje proces, w którym używana jest właściwość StretchOff:

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
var pres = new aspose.slides.Presentation();
try {
    // Pobiera pierwszy slajd
    var slide = pres.getSlides().get_Item(0);
    // Tworzy instancję klasy ImageEx
    var picture;
    var image = aspose.slides.Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    // Dodaje AutoShape ustawiony na prostokąt
    var aShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 100, 100, 300, 300);
    // Ustawia typ wypełnienia kształtu
    aShape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Picture));
    // Ustawia tryb wypełnienia obrazu kształtu
    aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(aspose.slides.PictureFillMode.Stretch);
    // Ustawia obraz wypełniający kształt
    aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
    // Określa offsety obrazu względem odpowiedniej krawędzi ramki ograniczającej kształt
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
    aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
    // Zapisuje plik PPTX na dysku
    pres.save("StretchOffsetLeftForPictureFrame_out.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

FAQ

Jak mogę sprawdzić, które formaty obrazów są obsługiwane dla PictureFrame?

Aspose.Slides obsługuje zarówno obrazy rastrowe (PNG, JPEG, BMP, GIF itp.), jak i obrazy wektorowe (np. SVG) poprzez obiekt obrazu przypisany do PictureFrame. Lista obsługiwanych formatów zazwyczaj pokrywa się z możliwościami silnika konwersji slajdów i obrazów.

Jak dodawanie dziesiątek dużych obrazów wpływa na rozmiar i wydajność pliku PPTX?

Osadzanie dużych obrazów zwiększa rozmiar pliku i zużycie pamięci; łączenie obrazów pomaga utrzymać mniejszy rozmiar prezentacji, ale wymaga, aby pliki zewnętrzne pozostały dostępne. Aspose.Slides umożliwia dodawanie obrazów jako linków, aby zmniejszyć rozmiar pliku.

Jak mogę zablokować obiekt obrazu przed przypadkowym przemieszczaniem lub zmianą rozmiaru?

Użyj shape locks dla PictureFrame (np. wyłączając możliwość przemieszczania lub zmiany rozmiaru). Mechanizm blokady jest wspierany dla różnych typów kształtów, w tym PictureFrame.

Czy wierność wektora SVG jest zachowywana przy eksportowaniu prezentacji do PDF/obrazów?

Aspose.Slides pozwala wyodrębnić SVG z PictureFrame jako oryginalny wektor. Przy eksportowaniu do PDF lub formatów rastrowych, wynik może być rasteryzowany w zależności od ustawień eksportu; fakt, że oryginalny SVG jest przechowywany jako wektor, potwierdza zachowanie po wyodrębnieniu.