Képek kezelésének optimalizálása prezentációkban PHP segítségével

Bevezetés

A képek élénkebbé és érdekesebbé teszik az előadásokat. A Microsoft PowerPointban képeket szúrhat be egy fájlból, az internetről vagy más helyekről a diákra. Hasonlóan, az Aspose.Slides lehetővé teszi képek hozzáadását a diákkhoz a prezentációkban különböző módokon.

Az Aspose.Slides támogatja a képműveleteket a következő népszerű formátumokban: JPEG, PNG, GIF és egyebek.

Képek helyi tárolásból való hozzáadása a diákhoz

Egy vagy több képet adhat a számítógépéről egy diához a prezentációban. Az alábbi példakód bemutatja, hogyan adjon képet a diára:

  $pres = new Presentation();
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $picture;
    $image = Images->fromFile("image.png");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $picture);
    $pres->save("pres.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Képek hozzáadása a webről a diákhoz

Ha a diára felvenni kívánt kép nem érhető el a számítógépén, közvetlenül az internetről adhatja hozzá.

Az alábbi példakód bemutatja, hogyan adjon egy képet az internetről egy diára :

  $pres = new Presentation();
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $imageUrl = new URL("[REPLACE WITH URL]");
    $connection = $imageUrl->openConnection();
    $inputStream = $connection->getInputStream();
    $outputStream = new Java("java.io.ByteArrayOutputStream");
    $Array = new java_class("java.lang.reflect.Array");
    $Byte = new JavaClass("java.lang.Byte");
    try {
      $buffer = $Array->newInstance($Byte, 1024);
      $read;
      while ($read = $inputStream->read($buffer, 0, $Array->getLength($buffer)) != -1) {
        $outputStream->write($buffer, 0, $read);
      } 
      $outputStream->flush();
      $image = $pres->getImages()->addImage($outputStream->toByteArray());
      $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $image);
    } finally {
      if (!java_is_null($inputStream)) {
        $inputStream->close();
      }
      $outputStream->close();
    }
    $pres->save("pres.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Képek hozzáadása dia-mesterekhez

A dia-mester a legfelső dia, amely az alatta lévő összes dia (téma, elrendezés stb.) információit tárolja és szabályozza. Így, ha képet ad a dia-mesterhez, az a kép minden alatta lévő dián megjelenik.

Az alábbi Java példakód bemutatja, hogyan adjon képet egy dia-mesterhez:

  $pres = new Presentation();
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $masterSlide = $slide->getLayoutSlide()->getMasterSlide();
    $picture;
    $image = Images->fromFile("image.png");
    try {
      $picture = $pres->getImages()->addImage($image);
    } finally {
      if (!java_is_null($image)) {
        $image->dispose();
      }
    }
    $masterSlide->getShapes()->addPictureFrame(ShapeType::Rectangle, 10, 10, 100, 100, $picture);
    $pres->save("pres.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Képek hozzáadása diák háttérként

Elhatározhatja, hogy egy képet használ háttérként egy adott dián vagy több dián. Ebben az esetben tekintse meg, hogyan Set an Image as a Slide Background.

SVG hozzáadása a prezentációkhoz

Bármely képet hozzáadhat vagy beilleszthet egy prezentációhoz a addPictureFrame metódus használatával, amely a ShapeCollection osztályhoz tartozik.

SVG képen alapuló képobjektum létrehozásához ezt a módot követheti:

  1. Hozzon létre SvgImage objektumot az ImageShapeCollection-be való beszúráshoz
  2. Hozzon létre PPImage objektumot az ISvgImage-ből
  3. Hozzon létre PictureFrame objektumot a PPImage osztály használatával

Az alábbi példakód bemutatja, hogyan valósítsa meg a fenti lépéseket egy SVG kép hozzáadásához a prezentációhoz:

  # Példányosítsa a Presentation osztályt, amely a PPTX fájlt képviseli
  $pres = new Presentation();
  try {
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "image.svg"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
    $svgContent = new String($bytes);

    $svgImage = new SvgImage($svgContent);
    $ppImage = $pres->getImages()->addImage($svgImage);
    $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 0, 0, $ppImage->getWidth(), $ppImage->getHeight(), $ppImage);
    $pres->save("output.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

SVG konvertálása alakzatok halmazára

Az Aspose.Slides SVG konvertálása alakzatok halmazára hasonló a PowerPoint SVG képekkel való munkához használt funkcióhoz:

PowerPoint felugró menü

A funkcionalitást a ShapeCollection osztály egyik addGroupShape metódusának túlterhelése biztosítja, amely az első argumentumként egy SvgImage objektumot várja.

Az alábbi példakód bemutatja, hogyan használja a leírt módszert egy SVG fájl alakzatok halmazára történő konvertálásához:

  # Új prezentáció létrehozása
  $presentation = new Presentation();
  try {
    # SVG fájl tartalmának beolvasása
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "image.svg"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
    $svgContent = $bytes;

    # SvgImage objektum létrehozása
    $svgImage = new SvgImage($svgContent);
    # Diák méretének lekérése
    $slideSize = $presentation->getSlideSize()->getSize();
    # SVG kép átalakítása alakzatcsoporttá, a diák méretére skálázva
    $presentation->getSlides()->get_Item(0)->getShapes()->addGroupShape($svgImage, 0.0, 0.0, $slideSize->getWidth(), $slideSize->getHeight());
    # Prezentáció mentése PPTX formátumban
    $presentation->save("output.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

Képek hozzáadása EMF-ként a diákhoz

Az Aspose.Slides for PHP via Java lehetővé teszi EMF képek generálását Excel-munkalapokból, és a képek EMF-ként való hozzáadását a diákhoz az Aspose.Cells segítségével.

Az alábbi példakód bemutatja, hogyan hajtsa végre a leírt feladatot:

  $book = new Workbook("chart.xlsx");
  $sheet = $book->getWorksheets()->get(0);
  $options = new ImageOrPrintOptions();
  $options->setHorizontalResolution(200);
  $options->setVerticalResolution(200);
  $options->setImageType(ImageType::EMF);
  # A munkafüzet mentése adatfolamba
  $sr = new SheetRender($sheet, $options);
  $pres = new Presentation();
  try {
    $pres->getSlides()->removeAt(0);
    $EmfSheetName = "";
    for($j = 0; $j < java_values($sr->getPageCount()) ; $j++) {
      $EmfSheetName = "test" . $sheet->getName() . " Page" . $j + 1 . ".out.emf";
      $sr->toImage($j, $EmfSheetName);
      $picture;
      $image = Images->fromFile($EmfSheetName);
      try {
        $picture = $pres->getImages()->addImage($image);
      } finally {
        if (!java_is_null($image)) {
          $image->dispose();
        }
      }
      $slide = $pres->getSlides()->addEmptySlide($pres->getLayoutSlides()->getByType(SlideLayoutType::Blank));
      $m = $slide->getShapes()->addPictureFrame(ShapeType::Rectangle, 0, 0, $pres->getSlideSize()->getSize()->getWidth(), $pres->getSlideSize()->getSize()->getHeight(), $picture);
    }
    $pres->save("output.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Képek cseréje a képgyűjteményben

Az Aspose.Slides lehetővé teszi a prezentáció képgyűjteményében (beleértve a diák alakzataiban használt képeket) tárolt képek cseréjét. Ez a rész több megközelítést mutat be a gyűjteményben lévő képek frissítésére. Az API egyszerű módszereket kínál egy kép nyers bájtadatok, egy IImage példány vagy egy már a gyűjteményben létező kép használatával történő cseréjére.

Kövesse az alábbi lépéseket:

  1. Töltse be a képeket tartalmazó prezentációs fájlt a Presentation osztállyal.
  2. Töltsön be egy új képet egy fájlból egy bájttömbbe.
  3. Cserélje le a célképet az új képre a bájttömb használatával.
  4. A második módszerben töltse be a képet egy IImage objektumba, és cserélje le a célképet ezzel az objektummal.
  5. A harmadik módszerben cserélje le a célképet egy már a prezentáció képgyűjteményében létező képre.
  6. Írja ki a módosított prezentációt PPTX fájlként.
// A Presentation osztály példányosítása, amely egy prezentációs fájlt reprezentál.
$presentation = new Presentation("sample.pptx");
try {
    // Az első mód.
    $imagePath = (new Java("java.io.File", "image0.jpeg"))->toPath();
    $imageData = (new Java("java.nio.file.Files"))->readAllBytes($imagePath);
    $oldImage = $presentation->getImages()->get_Item(0);
    $oldImage->replaceImage($imageData);

    // A második mód.
    $newImage = Images::fromFile("image1.png");
    $oldImage = $presentation->getImages()->get_Item(1);
    $oldImage->replaceImage($newImage);
    $newImage->dispose();
    
    // A harmadik mód.
    $oldImage = $presentation->getImages()->get_Item(2);
    $oldImage->replaceImage($presentation->getImages()->get_Item(3));
    
    // A prezentáció mentése fájlba.
    $presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

FAQ

Megmarad az eredeti kép felbontása a beillesztés után?

Igen. A forrás pixelek megmaradnak, de a végső megjelenés attól függ, hogyan van a picture méretezve a dián, illetve a mentéskor alkalmazott tömörítéstől.

Mi a legjobb módja a logó cseréjének egyszerre több tucat dián?

Helyezze a logót a mesterdia vagy egy elrendezés felé, és cserélje azt a prezentáció képgyűjteményében – a frissítések minden, az erőforrást használó elemre kiterjednek.

Átalakítható-e egy beillesztett SVG szerkeszthető alakzatokká?

Igen. Egy SVG-t konvertálhat egy alakzatcsoportba, amely után az egyes részek szerkeszthetők lesznek a szokásos alakzat tulajdonságokkal.

Hogyan állíthatom be egy képet háttérként egyszerre több diára?

Assign the image as the background a mesterdián vagy a megfelelő elrendezésen – minden, azt a mestert/elrendezést használó dia örökli a háttérképet.

Hogyan kerülhetem el, hogy a prezentáció sok kép miatt nagyon naggyá nőjön?

Használjon egyetlen képforrást többszörös példányok helyett, válasszon ésszerű felbontásokat, alkalmazzon tömörítést mentéskor, és a gyakran ismétlődő grafikákat a mesteren tartsa, ahol szükséges.