Beheer afbeeldingsframes in presentaties met PHP

Introductie

Een afbeeldingframe is een vorm die een afbeelding bevat – het is als een foto in een lijst.

U kunt een afbeelding aan een dia toevoegen via een afbeeldingframe. Op deze manier formatteert u de afbeelding door het afbeeldingframe te formatteren.

Maak een afbeeldingframe

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal via zijn index een referentie naar een dia op.
  3. Maak een PPImage‑object door een afbeelding toe te voegen aan de ImageCollection die hoort bij het presentatie‑object dat zal worden gebruikt om de vorm te vullen.
  4. Specificeer de breedte en hoogte van de afbeelding.
  5. Maak een PictureFrame op basis van de breedte en hoogte van de afbeelding via de addPictureFrame‑methode die wordt blootgesteld door het vorm‑object dat hoort bij de refererende dia.
  6. Voeg het afbeeldingframe (dat de afbeelding bevat) toe aan de dia.
  7. Schrijf de gewijzigde presentatie weg als een PPTX‑bestand.

Deze PHP‑code laat zien hoe u een afbeeldingframe maakt:

  # Instantieert de Presentation-klasse die een PPTX-bestand voorstelt
  $pres = new Presentation();
  try {
    # Haalt de eerste dia op
    $sld = $pres->getSlides()->get_Item(0);
    # Instantieert de Image-klasse
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # Voegt een afbeeldingframe toe met dezelfde hoogte en breedte als de afbeelding
    $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
    # Schrijft het PPTX-bestand naar de schijf
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Maak een afbeeldingframe met relatieve schaal

Door de relatieve schaal van een afbeelding aan te passen, kunt u een complexer afbeeldingframe maken.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal via zijn index een referentie naar een dia op.
  3. Voeg een afbeelding toe aan de afbeeldingcollectie van de presentatie.
  4. Maak een PPImage‑object door een afbeelding toe te voegen aan de ImageCollection die hoort bij het presentatie‑object dat zal worden gebruikt om de vorm te vullen.
  5. Specificeer de relatieve breedte en hoogte van de afbeelding in het afbeeldingframe.
  6. Schrijf de gewijzigde presentatie weg als een PPTX‑bestand.

Deze PHP‑code laat zien hoe u een afbeeldingframe met relatieve schaal maakt:

  # Instantieert de Presentation-klasse die de PPTX voorstelt
  $pres = new Presentation();
  try {
    # Haalt de eerste dia op
    $sld = $pres->getSlides()->get_Item(0);
    # Instantieert de Image-klasse
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # Voegt een afbeeldingframe toe met dezelfde hoogte en breedte als de afbeelding
    $pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
    # Stelt de relatieve schaal van breedte en hoogte in
    $pf->setRelativeScaleHeight(0.8);
    $pf->setRelativeScaleWidth(1.35);
    # Schrijft het PPTX-bestand naar de schijf
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Rasterafbeeldingen extraheren uit afbeeldingframes

U kunt rasterafbeeldingen extraheren uit PictureFrame‑objecten en opslaan in PNG, JPG en andere formaten. Het onderstaande code‑voorbeeld toont hoe u een afbeelding uit het document “sample.pptx” kunt extraheren en opslaan in PNG‑formaat.

  $presentation = new Presentation("sample.pptx");
  try {
    $firstSlide = $presentation->getSlides()->get_Item(0);
    $firstShape = $firstSlide->getShapes()->get_Item(0);
    if (java_instanceof($firstShape, new JavaClass("com.aspose.slides.PictureFrame"))) {
      $pictureFrame = $firstShape;
      try {
        $slideImage = $pictureFrame->getPictureFormat()->getPicture()->getImage()->getImage();
        $slideImage->save("slide_1_shape_1.png", ImageFormat::Png);
      } finally {
        if (!java_is_null($slideImage)) {
          $slideImage->dispose();
        }
      }
    }
  } catch (JavaException $e) {
  } finally {
    $presentation->dispose();
  }

SVG‑afbeeldingen extraheren uit afbeeldingframes

Wanneer een presentatie SVG‑graphics bevat die in PictureFrame‑vormen zijn geplaatst, laat Aspose.Slides for PHP via Java u de originele vector‑afbeeldingen met volledige getrouwheid ophalen. Door de vormcollectie van de dia te doorlopen, kunt u elk PictureFrame identificeren, controleren of de onderliggende PPImage SVG‑inhoud bevat, en vervolgens die afbeelding opslaan op schijf of in een stream in het oorspronkelijke SVG‑formaat.

Het volgende code‑voorbeeld toont hoe u een SVG‑afbeelding uit een afbeeldingframe kunt extraheren:

$presentation = new Presentation("sample.pptx");

try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);

    if (java_instanceof($shape, new JavaClass("com.aspose.slides.PictureFrame"))) {
        $svgImage = $shape->getPictureFormat()->getPicture()->getImage()->getSvgImage();

        if ($svgImage !== null) {
            file_put_contents("output.svg", $svgImage->getSvgData());
        }
    }
} finally {
    $presentation->dispose();
}

Transparantie van een afbeelding ophalen

Aspose.Slides maakt het mogelijk de transparantie‑effecten op een afbeelding op te halen. Deze PHP‑code demonstreert de bewerking:

  $presentation = new Presentation("Test.pptx");
  $pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);
  $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
  foreach($imageTransform as $effect) {
    if (java_instanceof($effect, new JavaClass("com.aspose.slides.AlphaModulateFixed"))) {
      $alphaModulateFixed = $effect;
      $transparencyValue = 100 - $alphaModulateFixed->getAmount();
      echo("Picture transparency: " . $transparencyValue);
    }
  }

Helderheid en contrast van een afbeelding ophalen

Aspose.Slides maakt het mogelijk de helderheid‑ en contrast‑effecten op een afbeelding op te halen. De Luminance‑klasse vertegenwoordigt dit afbeeldings‑transformatie‑effect.

Deze PHP‑code laat zien hoe u de helderheid‑ en contrastinstellingen van een afbeeldingframe ophaalt:

  $presentation = new Presentation("sample.pptx");

  try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);
    $pictureFrame = $shape;

    $imageTransform = $pictureFrame->getPictureFormat()->getPicture()->getImageTransform();
    $imageTransformCount = java_values($imageTransform->size());
    for ($index = 0; $index < $imageTransformCount; $index++) {
      $effect = $imageTransform->get_Item($index);
      if (java_instanceof($effect, new JavaClass("com.aspose.slides.Luminance"))) {
        $luminance = $effect->getEffective();
        $brightness = java_values($luminance->getBrightness());
        $contrast = java_values($luminance->getContrast());

        echo("Brightness: " . $brightness . PHP_EOL);
        echo("Contrast: " . $contrast . PHP_EOL);
      }
    }
  } finally {
    $presentation->dispose();
  }

Afbeeldingsframe‑opmaak

Aspose.Slides biedt veel opmaakopties die op een afbeeldingframe kunnen worden toegepast. Met die opties kunt u een afbeeldingframe aanpassen zodat het aan specifieke eisen voldoet.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal via zijn index een referentie naar een dia op.
  3. Maak een PPImage‑object door een afbeelding toe te voegen aan de ImageCollection die hoort bij het presentatie‑object dat zal worden gebruikt om de vorm te vullen.
  4. Specificeer de breedte en hoogte van de afbeelding.
  5. Maak een PictureFrame op basis van de breedte en hoogte van de afbeelding via de addPictureFrame‑methode die wordt blootgesteld door het ShapeCollection‑object dat hoort bij de refererende dia.
  6. Voeg het afbeeldingframe (dat de afbeelding bevat) toe aan de dia.
  7. Stel de lijnkleur van het afbeeldingframe in.
  8. Stel de lijndikte van het afbeeldingframe in.
  9. Roteer het afbeeldingframe door een positieve of negatieve waarde op te geven.
    • Een positieve waarde roteert de afbeelding met de klok mee.
    • Een negatieve waarde roteert de afbeelding tegen de klok in.
  10. Voeg het afbeeldingframe (dat de afbeelding bevat) opnieuw toe aan de dia.
  11. Schrijf de gewijzigde presentatie weg als een PPTX‑bestand.

Deze PHP‑code laat het opmaakproces van een afbeeldingframe zien:

  # Instantieert de Presentation-klasse die de PPTX voorstelt
  $pres = new Presentation();
  try {
    # Haalt de eerste dia op
    $sld = $pres->getSlides()->get_Item(0);
    # Instantieert de Image-klasse
    $imgx = $pres->getImages()->addImage(new Java("java.io.FileInputStream", new Java("java.io.File", "asp1.jpg")));
    # Voegt een Picture Frame toe met dezelfde hoogte en breedte als de afbeelding
    $pf = $sld->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $imgx->getWidth(), $imgx->getHeight(), $imgx);
    # Past enige opmaak toe op PictureFrameEx
    $pf->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $pf->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
    $pf->getLineFormat()->setWidth(20);
    $pf->setRotation(45);
    # Schrijft het PPTX-bestand naar de schijf
    $pres->save("RectPicFrame.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Een afbeelding als koppeling toevoegen

Om grote presentaties te voorkomen, kunt u afbeeldingen (of video’s) via koppelingen toevoegen in plaats van de bestanden direct in de presentatie in te sluiten. Deze PHP‑code toont hoe u een afbeelding en een video in een placeholder kunt toevoegen:

  $presentation = new Presentation("input.pptx");
  try {
    $shapesToRemove = new Java("java.util.ArrayList");
    $shapesCount = $presentation->getSlides()->get_Item(0)->getShapes()->size();
    for($i = 0; $i < java_values($shapesCount) ; $i++) {
      $autoShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item($i);
      if (java_is_null($autoShape->getPlaceholder())) {
        continue;
      }
      switch ($autoShape->getPlaceholder()->getType()) {
        case PlaceholderType::Picture :
          $pictureFrame = $presentation->getSlides()->get_Item(0)->getShapes()->addPictureFrame(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 PlaceholderType::Media :
          $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;
      }
    }
    foreach($shapesToRemove as $shape) {
      $presentation->getSlides()->get_Item(0)->getShapes()->remove($shape);
    }
    $presentation->save("output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Afbeeldingen bijsnijden

Deze PHP‑code laat zien hoe u een bestaande afbeelding op een dia kunt bijsnijden:

  $pres = new Presentation();
  # Creëert een nieuw afbeeldingobject
  try {
    $picture;
    $image = Images->fromFile($imagePath);
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Voegt een PictureFrame toe aan een dia
    $picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 100, 100, 420, 250, $picture);
    # Bijsnijdt de afbeelding (percentagewaarden)
    $picFrame->getPictureFormat()->setCropLeft(23.6);
    $picFrame->getPictureFormat()->setCropRight(21.5);
    $picFrame->getPictureFormat()->setCropTop(3);
    $picFrame->getPictureFormat()->setCropBottom(31);
    # Slaat het resultaat op
    $pres->save($outPptxFile, SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Bijsnijden van gebieden van een afbeelding verwijderen

Als u de bijgesneden gebieden van een afbeelding die in een frame zit wilt verwijderen, kunt u de methode deletePictureCroppedAreas() gebruiken. Deze methode retourneert de bijgesneden afbeelding of de originele afbeelding als bijsnijden niet nodig is.

Deze PHP‑code demonstreert de bewerking:

  $presentation = new Presentation("PictureFrameCrop.pptx");
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Haalt het PictureFrame op van de eerste dia
    $picFrame = $slide->getShapes()->get_Item(0);
    # Verwijdert bijgesneden gebieden van de PictureFrame-afbeelding en retourneert de bijgesneden afbeelding
    $croppedImage = $picFrame->getPictureFormat()->deletePictureCroppedAreas();
    # Slaat het resultaat op
    $presentation->save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Afbeeldingen comprimeren

U kunt een afbeelding in een presentatie comprimeren met de methode PictureFillFormat::compressImage() . Deze methode comprimeert een afbeelding door de grootte te verkleinen op basis van de vormgrootte en de opgegeven resolutie, met de optie om bijgesneden gebieden te verwijderen.

Hij past de grootte en resolutie van de afbeelding aan op dezelfde manier als de PowerPoint‑functie Afbeeldingsopmaak → Afbeeldingen comprimeren → Resolutie.

De volgende PHP‑voorbeelden tonen hoe u een afbeelding in een presentatie kunt comprimeren door een doelresolutie op te geven en eventueel bijgesneden gebieden te verwijderen:

$presentation = new Presentation("demo.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $pictureFrame = $slide->getShapes()->get_Item(0);

    # Comprimeer de afbeelding met een doelresolutie van 150 DPI (webresolutie) en verwijder bijgesneden gebieden.
    $result = $pictureFrame->getPictureFormat()->compressImage(true, PicturesCompression::Dpi150);

    # Controleer het resultaat van de compressie.
    if ($result) {
        echo "Image successfully compressed.";
    } else {
        echo "Image compression failed or no changes were necessary.";
    }

    $presentation->save("CompressedImage.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Of door direct een aangepaste DPI‑waarde te gebruiken:

$presentation = new Presentation("demo.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $pictureFrame = $slide->getShapes()->get_Item(0);

    # Comprimeer de afbeelding tot 150 DPI (webresolutie), waarbij bijgesneden gebieden worden verwijderd.
    $pictureFrame->getPictureFormat()->compressImage(true, 150.0);

    $presentation->save("CompressedImage.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Verhoudingsvergrendeling

Als u wilt dat een vorm die een afbeelding bevat zijn verhoudingen behoudt, zelfs nadat u de afmetingen van de afbeelding verandert, kunt u de methode setAspectRatioLocked gebruiken om de instelling Verhoudingsvergrendeling in te stellen.

Deze PHP‑code laat zien hoe u de verhoudingsvergrendeling van een vorm toepast:

  $pres = new Presentation("pres.pptx");
  try {
    $layout = $pres->getLayoutSlides()->getByType(SlideLayoutType::Custom);
    $emptySlide = $pres->getSlides()->addEmptySlide($layout);
    $picture;
    $image = Images->fromFile("image.png");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    $pictureFrame = $emptySlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 150, $presImage->getWidth(), $presImage->getHeight(), $picture);
    # stel de vorm in om de aspectratio te behouden bij het schalen
    $pictureFrame->getPictureFrameLock()->setAspectRatioLocked(true);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

De StretchOff‑eigenschap gebruiken

Met de methoden setStretchOffsetLeft, setStretchOffsetTop, setStretchOffsetRight en setStretchOffsetBottom van de PictureFillFormat‑klasse kunt u een vulrechthoek opgeven.

Wanneer er rekwerk wordt gespecificeerd voor een afbeelding, wordt een bronrechthoek geschaald om te passen binnen de opgegeven vulrechthoek. Elke rand van de vulrechthoek wordt gedefinieerd door een percentage‑offset ten opzichte van de corresponderende rand van de begrenzings­box van de vorm. Een positief percentage geeft een inlage aan, een negatief percentage een uitsteeksel.

  1. Maak een instantie van de Presentation‑klasse.
  2. Haal via zijn index een referentie naar een dia op.
  3. Voeg een rechthoek AutoShape toe.
  4. Maak een afbeelding.
  5. Stel het vultype van de vorm in.
  6. Stel de afbeelding‑vulmodus van de vorm in.
  7. Voeg een afbeelding toe om de vorm te vullen.
  8. Specificeer afbeeldings‑offsets ten opzichte van de corresponderende rand van de begrenzings­box van de vorm.
  9. Schrijf de gewijzigde presentatie weg als een PPTX‑bestand.

Deze PHP‑code demonstreert een proces waarbij de StretchOff‑eigenschap wordt gebruikt:

  # Instantieert de Presentation-klasse die een PPTX-bestand voorstelt
  $pres = new Presentation();
  try {
    # Haalt de eerste dia op
    $slide = $pres->getSlides()->get_Item(0);
    # Instantieert de ImageEx-klasse
    $picture;
    $image = Images->fromFile("aspose-logo.jpg");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    # Voegt een AutoShape toe ingesteld op rechthoek
    $aShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 300);
    # Stelt het vultype van de vorm in
    $aShape->getFillFormat()->setFillType(FillType::Picture);
    # Stelt de afbeeldingvulmodus van de vorm in
    $aShape->getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode->Stretch);
    # Stelt de afbeelding in om de vorm te vullen
    $aShape->getFillFormat()->getPictureFillFormat()->getPicture()->setImage($picture);
    # Specificeert de afbeeldingsoffsets ten opzichte van de corresponderende rand van de begrenzingsbox van de vorm
    $aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetLeft(25);
    $aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetRight(25);
    $aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetTop(-20);
    $aShape->getFillFormat()->getPictureFillFormat()->setStretchOffsetBottom(-10);
    # Schrijft het PPTX-bestand naar de schijf
    $pres->save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Veelgestelde vragen

Hoe kan ik achterhalen welke afbeeldingsformaten worden ondersteund voor een afbeeldingframe?

Aspose.Slides ondersteunt zowel raster‑afbeeldingen (PNG, JPEG, BMP, GIF, enz.) als vector‑afbeeldingen (bijvoorbeeld SVG) via het afbeeldingsobject dat is toegewezen aan een PictureFrame. De lijst met ondersteunde formaten overlapt doorgaans met de mogelijkheden van de slide‑ en afbeeldingconversie‑engine.

Hoe beïnvloedt het toevoegen van tientallen grote afbeeldingen de PPTX‑grootte en -prestaties?

Het insluiten van grote afbeeldingen vergroot de bestandsgrootte en het geheugenverbruik; afbeeldingen koppelen helpt de presentatiegrootte te beperken, maar vereist dat de externe bestanden beschikbaar blijven. Aspose.Slides biedt de mogelijkheid om afbeeldingen via een koppeling toe te voegen om de bestandsgrootte te reduceren.

Hoe kan ik een afbeeldingsobject vergrendelen tegen onbedoeld verplaatsen of schalen?

Gebruik shape locks voor een PictureFrame (bijvoorbeeld om verplaatsen of schalen uit te schakelen). Het vergrendelingsmechanisme wordt ondersteund voor diverse vormtypen, inclusief PictureFrame.

Is de vector‑getrouwheid van SVG behouden bij het exporteren van een presentatie naar PDF/afbeeldingen?

Aspose.Slides maakt het mogelijk een SVG uit een PictureFrame te extraheren als de originele vector. Bij het exporteren naar PDF of rasterformaten kan het resultaat afhankelijk van de exportinstellingen gerasterd worden; het feit dat de oorspronkelijke SVG als vector is opgeslagen, wordt bevestigd door het extractiegedrag.