بهینه‌سازی مدیریت تصویر در ارائه‌ها با استفاده از PHP

مقدمه

تصاویر ارائه‌ها را جذاب و جالب‌تر می‌کنند. در Microsoft PowerPoint می‌توانید تصاویر را از یک فایل، اینترنت یا مکان‌های دیگر به اسلایدها وارد کنید. به همان شکل، Aspose.Slides به شما امکان می‌دهد تا با روش‌های مختلف تصاویر را به اسلایدهای ارائه‌ی خود اضافه کنید.

Aspose.Slides عملیات با تصاویر را در این قالب‌های محبوب پشتیبانی می‌کند: JPEG، PNG، GIF و سایرین.

افزودن تصاویر ذخیره‌شده به‌صورت محلی به اسلایدها

می‌توانید یک یا چند تصویر را که بر روی کامپیوتر شما هستند به یک اسلاید در یک ارائه اضافه کنید. این کد نمونه نحوه افزودن یک تصویر به اسلاید را نشان می‌دهد:

  $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();
    }
  }

افزودن تصاویر از وب به اسلایدها

اگر تصویری که می‌خواهید به اسلاید اضافه کنید بر روی کامپیوتر شما موجود نیست، می‌توانید تصویر را مستقیماً از وب اضافه کنید.

این کد نمونه نشان می‌دهد که چگونه یک تصویر را از وب به یک اسلاید اضافه کنید:

  $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();
    }
  }

افزودن تصاویر به اسلاید مسترها

یک اسلاید مستر بالاترین اسلاید است که اطلاعات (قالب، چیدمان و غیره) درباره تمام اسلایدهای زیرین را ذخیره و کنترل می‌کند. بنابراین، زمانی که تصویری را به یک اسلاید مستر اضافه کنید، آن تصویر در هر اسلاید تحت آن مستر ظاهر می‌شود.

این کد نمونه جاوا نشان می‌دهد چگونه یک تصویر را به اسلاید مستر اضافه کنید:

  $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();
    }
  }

افزودن تصاویر به‌عنوان پس‌زمینه اسلاید

ممکن است تصمیم بگیرید از یک تصویر به‌عنوان پس‌زمینه اسلاید خاص یا چند اسلاید استفاده کنید. در این صورت، باید نحوه تنظیم یک تصویر به‌عنوان پس‌زمینه اسلاید را ببینید.

افزودن SVG به ارائه‌ها

می‌توانید هر تصویری را به یک ارائه اضافه یا وارد کنید با استفاده از متد addPictureFrame که بخشی از کلاس ShapeCollection است.

برای ایجاد شیء تصویر بر پایه تصویر SVG، می‌توانید این کار را به این روش انجام دهید:

  1. یک شیء SvgImage ایجاد کنید تا به ImageShapeCollection وارد شود
  2. یک شیء PPImage از ISvgImage ایجاد کنید
  3. یک شیء PictureFrame با استفاده از کلاس PPImage ایجاد کنید

این کد نمونه نشان می‌دهد چگونه مراحل فوق را برای افزودن تصویر SVG به یک ارائه پیاده‌سازی کنید:

  # ایجاد نمونه از کلاس Presentation که نمایانگر فایل PPTX است
  $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 به مجموعه‌ای از اشکال

تبدیل SVG به مجموعه‌ای از اشکال در Aspose.Slides شبیه به عملکرد PowerPoint است که برای کار با تصاویر SVG استفاده می‌شود:

PowerPoint Popup Menu

این عملکرد توسط یکی از overloadهای متد addGroupShape از کلاس ShapeCollection که یک شیء SvgImage را به‌عنوان اولین آرگومان می‌گیرد، ارائه می‌شود.

این کد نمونه نشان می‌دهد چگونه از روش توصیف‌شده برای تبدیل یک فایل SVG به مجموعه‌ای از اشکال استفاده کنید:

  # ایجاد ارائه جدید
  $presentation = new Presentation();
  try {
    # خواندن محتوای فایل SVG
$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
    $svgImage = new SvgImage($svgContent);
    # دریافت اندازه اسلاید
    $slideSize = $presentation->getSlideSize()->getSize();
    # تبدیل تصویر SVG به گروهی از شکل‌ها و مقیاس‌بندی آن به اندازه اسلاید
    $presentation->getSlides()->get_Item(0)->getShapes()->addGroupShape($svgImage, 0.0, 0.0, $slideSize->getWidth(), $slideSize->getHeight());
    # ذخیره ارائه در قالب PPTX
    $presentation->save("output.pptx", SaveFormat::Pptx);
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }

افزودن تصاویر به‌صورت EMF به اسلایدها

Aspose.Slides برای PHP از طریق Java به شما امکان می‌دهد تصاویر EMF را از صفحات Excel تولید کنید و با Aspose.Cells این تصاویر را به‌صورت EMF به اسلایدها اضافه کنید.

این کد نمونه نشان می‌دهد چگونه این کار توصیف‌شده را انجام دهید:

  $book = new Workbook("chart.xlsx");
  $sheet = $book->getWorksheets()->get(0);
  $options = new ImageOrPrintOptions();
  $options->setHorizontalResolution(200);
  $options->setVerticalResolution(200);
  $options->setImageType(ImageType::EMF);
  # ذخیره کتاب کار در جریان
  $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();
    }
  }

جایگزینی تصاویر در مجموعه تصویر

Aspose.Slides به شما اجازه می‌دهد تصاویر ذخیره‌شده در مجموعه تصویر یک ارائه (از جمله آن‌هایی که توسط شکل‌های اسلاید استفاده می‌شوند) را جایگزین کنید. این بخش چندین رویکرد برای به‌روز کردن تصاویر در مجموعه نشان می‌دهد. API روش‌های ساده‌ای برای جایگزینی یک تصویر با استفاده از داده‌های بایتی خام، یک نمونه IImage یا تصویر دیگری که قبلاً در مجموعه موجود است، فراهم می‌کند.

  1. فایل ارائه‌ای که شامل تصاویر است را با استفاده از کلاس Presentation بارگذاری کنید.
  2. یک تصویر جدید را از فایل به یک آرایه بایت بارگذاری کنید.
  3. تصویر هدف را با تصویر جدید با استفاده از آرایه بایت جایگزین کنید.
  4. در رویکرد دوم، تصویر را به یک شیء IImage بارگذاری کنید و تصویر هدف را با آن شیء جایگزین کنید.
  5. در رویکرد سوم، تصویر هدف را با تصویری که قبلاً در مجموعه تصویر ارائه وجود دارد، جایگزین کنید.
  6. ارائه‌ی اصلاح‌شده را به‌عنوان فایل PPTX ذخیره کنید.
// ایجاد نمونه‌ای از کلاس Presentation که نمایانگر یک فایل ارائه است.
$presentation = new Presentation("sample.pptx");
try {
    // روش اول.
    $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);

    // روش دوم.
    $newImage = Images::fromFile("image1.png");
    $oldImage = $presentation->getImages()->get_Item(1);
    $oldImage->replaceImage($newImage);
    $newImage->dispose();
    
    // روش سوم.
    $oldImage = $presentation->getImages()->get_Item(2);
    $oldImage->replaceImage($presentation->getImages()->get_Item(3));
    
    // ذخیره ارائه در یک فایل.
    $presentation->save("output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

پرسش‌های متداول

آیا وضوح تصویر اصلی پس از وارد شدن دست نخورده می‌ماند؟

بله. پیکسل‌های منبع حفظ می‌شوند، اما ظاهر نهایی به این بستگی دارد که چگونه تصویر در اسلاید مقیاس‌بندی شده و چه فشرده‌سازی در ذخیره‌سازی اعمال شده است.

بهترین روش برای جایگزینی یک لوگو مشابه در ده‌ها اسلاید به‌صورت همزمان چیست؟

لوگو را بر روی اسلاید مستر یا یک چیدمان قرار دهید و آن را در مجموعه تصویر ارائه جایگزین کنید—به‌روزرسانی‌ها به تمام عناصری که از این منبع استفاده می‌کنند انتشار می‌یابد.

آیا می‌توان SVG وارد شده را به شکل‌های قابل ویرایش تبدیل کرد؟

بله. می‌توانید یک SVG را به یک گروه از شکل‌ها تبدیل کنید، پس از آن بخش‌های جداگانه با ویژگی‌های استاندارد شکل قابل ویرایش می‌شوند.

چگونه می‌توانم یک تصویر را به‌عنوان پس‌زمینه برای چند اسلاید به‌صورت همزمان تنظیم کنم؟

تصویر را به‌عنوان پس‌زمینه اختصاص دهید بر روی اسلاید مستر یا چیدمان مربوطه—هر اسلایدی که از این مستر/چیدمان استفاده می‌کند پس‌زمینه را به ارث می‌برد.

چگونه می‌توانم از بزرگ شدن بیش از حد اندازه ارائه به‌دلیل تعداد زیاد تصاویر جلوگیری کنم؟

به‌جای تکرار، یک منبع تصویر واحد را مجدداً استفاده کنید، وضوح‌های معقول را انتخاب کنید، هنگام ذخیره‌سازی فشرده‌سازی اعمال کنید و گرافیک‌های تکراری را در مستر حفظ کنید در صورتی که مناسب باشد.