Μετατροπή Διαφανειών Παρουσίασης σε Εικόνες σε C++

Εισαγωγή

Η Aspose.Slides για C++ μπορεί να αποδίδει μεμονωμένες διαφάνειες από παρουσιάσεις PowerPoint και OpenDocument ως PNG, JPEG, GIF, TIFF και άλλες μορφές εικόνας.

Για να μετατρέψετε μια διαφάνεια σε εικόνα, ακολουθήστε τα ακόλουθα βήματα:

  1. Φορτώστε την παρουσίαση με την κλάση Presentation.
  2. Επιλέξτε τη διαφάνεια που θέλετε να αποδώσετε.
  3. Εάν είναι απαραίτητο, διαμορφώστε την απόδοση με την κλάση RenderingOptions ή TiffOptions.
  4. Καλέστε τη μέθοδο ISlide::GetImage. Επιστρέφει ένα αντικείμενο IImage.
  5. Καλέστε τη μέθοδο IImage::Save και καθορίστε τη μορφή εξόδου με μια τιμή ImageFormat.

Μετατροπή μιας Διαφάνειας σε Εικόνα PNG

Η πιο απλή μετατροπή χρησιμοποιεί τις προεπιλεγμένες ρυθμίσεις απόδοσης. Το προκύπτον αντικείμενο IImage μπορεί να υποβληθεί σε επεξεργασία στη μνήμη ή να αποθηκευτεί σε αρχείο.

Το παρακάτω παράδειγμα C++ αποδίδει την πρώτη διαφάνεια και την αποθηκεύει ως εικόνα PNG:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage();
image->Save(u"Slide_0.png", ImageFormat::Png);

image->Dispose();
presentation->Dispose();

Μετατροπή Διαφανειών σε Εικόνες με Προσαρμοσμένα Μεγέθη

Χρησιμοποιήστε την υπερφόρτωση της μεθόδου ISlide::GetImage που δέχεται μια τιμή Size για να αποδώσετε μια διαφάνεια με ακριβείς διαστάσεις σε εικονοστοιχεία.

Το παρακάτω παράδειγμα δημιουργεί μια εικόνα JPEG 1820 × 1040:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::Drawing;

Size imageSize(1820, 1040);

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(imageSize);
image->Save(u"Slide_0.jpg", ImageFormat::Jpeg);

image->Dispose();
presentation->Dispose();

Μετατροπή Διαφανειών με Σημειώσεις και Σχόλια σε Εικόνες

Από προεπιλογή, οι εικόνες των διαφανειών δεν περιλαμβάνουν σημειώσεις ή σχόλια. Αναθέστε ένα αντικείμενο NotesCommentsLayoutingOptions στη μέθοδο RenderingOptions::set_SlidesLayoutOptions για να ελέγξετε πού εμφανίζονται οι σημειώσεις και τα σχόλια.

Το παρακάτω παράδειγμα τοποθετεί περικομμένες σημειώσεις κάτω από τη διαφάνεια και σχόλια στα δεξιά της:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/CommentsPositions.h>
#include <Export/NotesCommentsLayoutingOptions.h>
#include <Export/NotesPositions.h>
#include <Export/RenderingOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;

float scaleX = 2.0f;
float scaleY = scaleX;

auto layoutOptions = MakeObject<NotesCommentsLayoutingOptions>();
layoutOptions->set_NotesPosition(NotesPositions::BottomTruncated);
layoutOptions->set_CommentsPosition(CommentsPositions::Right);
layoutOptions->set_CommentsAreaWidth(500);
layoutOptions->set_CommentsAreaColor(Color::get_AntiqueWhite());

auto renderingOptions = MakeObject<RenderingOptions>();
renderingOptions->set_SlidesLayoutOptions(layoutOptions);

auto presentation = MakeObject<Presentation>(u"Presentation_with_notes_and_comments.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(renderingOptions, scaleX, scaleY);
image->Save(u"Image_with_notes_and_comments_0.gif", ImageFormat::Gif);

image->Dispose();
presentation->Dispose();

Μετατροπή Διαφανειών σε Εικόνες Χρησιμοποιώντας τις Ρυθμίσεις TIFF

Η κλάση TiffOptions σας επιτρέπει να ελέγξετε το μέγεθος, την ανάλυση και άλλες ιδιότητες της αποδομένης εικόνας TIFF.

Το παρακάτω παράδειγμα αποδίδει την πρώτη διαφάνεια ως εικόνα TIFF 2160 × 2880 με ανάλυση 300 DPI:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/TiffOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;

auto tiffOptions = MakeObject<TiffOptions>();
tiffOptions->set_ImageSize(Size(2160, 2880));
tiffOptions->set_DpiX(300);
tiffOptions->set_DpiY(300);

auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(tiffOptions);
image->Save(u"output.tiff", ImageFormat::Tiff);

image->Dispose();
presentation->Dispose();

Μετατροπή Όλων των Διαφανειών σε Εικόνες

Διατρέξτε τη συλλογή διαφανειών για να μετατρέψετε ολόκληρη την παρουσίαση σε σειρά εικόνων. Οι κρυμμένες διαφάνειες περιλαμβάνονται εκτός εάν τις παραλείψετε ρητά.

Το παρακάτω παράδειγμα αποδίδει κάθε διαφάνεια ως εικόνα JPEG με οριζόντιους και κάθετους συντελεστές κλίμακας 2:

#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

float scaleX = 2.0f;
float scaleY = scaleX;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");

int32_t slideCount = presentation->get_Slides()->get_Count();
for (int32_t index = 0; index < slideCount; index++)
{
    auto slide = presentation->get_Slide(index);
    auto image = slide->GetImage(scaleX, scaleY);
    image->Save(String::Format(u"Slide_{0}.jpg", index), ImageFormat::Jpeg);
    image->Dispose();
}

presentation->Dispose();

Δημιουργία Εξόδου Enhanced Metafile

Το Enhanced Metafile (EMF) είναι χρήσιμο όταν γραφικά βασισμένα σε διανύσματα πρέπει να ανταλλαχθούν με το Microsoft Office ή άλλες εφαρμογές των Windows που υποστηρίζουν μετααρχεία Windows. Σε αντίθεση με μια εικόνα βασισμένη σε εικονοστοιχεία, ένα EMF μπορεί να διατηρήσει τις ενέργειες σχεδίασης διανυσμάτων που κλιμακώνονται χωρίς την ίδια απώλεια ευκρίνειας. Ωστόσο, το EMF είναι κυρίως μια μορφή συμβατότητας για εφαρμογές με υποστήριξη μετααρχείων Windows, όχι μια καθολική μορφή ανταλλαγής. Επιπλέον, πολύπλοκο περιεχόμενο διαφάνειας, όπως εικόνες bitmap και ορισμένα εφέ, μπορεί να αποθηκευτεί ως στοιχεία rasterized μέσα στο δοχείο του διανυσματικού μετααρχείου.

Εξαγωγή μιας Διαφάνειας σε EMF

Η μέθοδος ISlide::WriteAsEmf γράφει ένα ISlide σε ένα στόχο ροής σε μορφή EMF. Το παρακάτω παράδειγμα φορτώνει μια παρουσίαση, επιλέγει την πρώτη διαφάνεια και τη γράφει σε ροή αρχείου EMF:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <system/io/file.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto emfStream = File::Create(u"Slide_0.emf");
slide->WriteAsEmf(emfStream);

emfStream->Close();
presentation->Dispose();

Ο καλών έχει την ιδιοκτησία της ροής που περνιέται στη ISlide::WriteAsEmf και πρέπει να την κλείσει ή να την αποδεσμεύσει. Η Aspose.Slides γράφει στη ροή στην τρέχουσα θέση της και τη αφήνει ανοιχτή.

Μετατροπή μιας Εικόνας SVG σε EMF και Προσθήκη στην Παρουσίαση

Χρησιμοποιήστε το ISvgImage::WriteAsEmf για να μετατρέψετε το περιεχόμενο SVG σε EMF. Τα προκύπτοντα bytes μπορούν να προστεθούν στην παρουσίαση μέσω του IImageCollection::AddImage και να τοποθετηθούν σε μια διαφάνεια με την IShapeCollection::AddPictureFrame.

Το παρακάτω παράδειγμα δημιουργεί ένα SvgImage από σήμανση SVG, το μετατρέπει σε EMF στη μνήμη, εισάγει το μετααρχείο στην πρώτη διαφάνεια και αποθηκεύει την παρουσίαση:

#include <DOM/IImageCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <DOM/SvgImage.h>
#include <Export/SaveFormat.h>
#include <system/io/memory_stream.h>
#include <system/smart_ptr.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;

String svgContent = u"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
auto svgImage = MakeObject<SvgImage>(svgContent);

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);

auto emfStream = MakeObject<MemoryStream>();
svgImage->WriteAsEmf(emfStream);

auto emfData = emfStream->ToArray();
auto image = presentation->get_Images()->AddImage(emfData);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20, 20, 200, 100, image);

presentation->Save(u"Presentation_with_emf.pptx", SaveFormat::Pptx);

emfStream->Close();
presentation->Dispose();

Η ISvgImage::WriteAsEmf δεν αναλαμβάνει την ιδιοκτησία της ροής προορισμού. Μετά τη γραφή, η θέση της ροής είναι στο τέλος των παραγόμενων δεδομένων. Το παράδειγμα καλεί το MemoryStream::ToArray για να λάβει το πλήρες buffer ανεξάρτητα από την τρέχουσα θέση της ροής, και στη συνέχεια περνά αυτόν τον πίνακα byte στη IImageCollection::AddImage. Διατηρήστε τη ροή ανοιχτή μέχρι να ολοκληρωθεί η ανάγνωση από τον καταναλωτή, και κλείστε την μετά.

Η δημιουργία EMF είναι διαθέσιμη στα λειτουργικά συστήματα που υποστηρίζονται από το Aspose.Slides for C++, αλλά η απόδοση μπορεί να διαφέρει μεταξύ πλατφορμών όταν λείπουν οι γραμματοσειρές ή οι εγγενείς εξαρτήσεις γραφικών. Εγκαταστήστε τις γραμματοσειρές που χρησιμοποιούνται από το πηγαίο περιεχόμενο ή διαμορφώστε κατάλληλες αντικαταστάσεις, ακολουθήστε τις απαιτήσεις πλατφόρμας για το Aspose.Slides for C++ και επικυρώστε το αποτέλεσμα στην εφαρμογή-προορισμό που καταναλώνει EMF. Οι εφαρμογές Linux και macOS συχνά έχουν περιορισμένη ή ασυνεπή υποστήριξη για προβολή και επεξεργασία μετααρχείων των Windows.

Απόδοση Έγχρωμων Emoji

Συχνές Ερωτήσεις

Υποστηρίζει το Aspose.Slides την απόδοση διαφανειών με κινούμενα γραφικά;

Όχι. Η μέθοδος ISlide::GetImage αποδίδει μια στατική εικόνα της διαφάνειας και δεν εξάγει τις κινούμενες εικόνες.

Μπορούν οι κρυμμένες διαφάνειες να εξαχθούν ως εικόνες;

Ναι. Οι κρυμμένες διαφάνειες μπορούν να αποδοθούν όπως οι κανονικές διαφάνειες. Συμπεριλάβετε τις στη βρόχο επεξεργασίας, όπως φαίνεται στο παραπάνω παράδειγμα.

Διατηρούνται οι σκιές και άλλα εφέ στις εικόνες των διαφανειών;

Ναι. Η Aspose.Slides αποδίδει σκιές, διαφάνειες και άλλα υποστηριζόμενα γραφικά εφέ στις εικόνες των διαφανειών.