Kelola Bingkai Gambar dalam Presentasi di Android
Pengantar
Bingkai gambar adalah bentuk yang berisi gambar—ia seperti gambar dalam sebuah bingkai.
Anda dapat menambahkan gambar ke slide melalui bingkai gambar. Dengan cara ini, Anda dapat memformat gambar dengan memformat bingkai gambar.
Tip
Aspose menyediakan konverter gratis—JPEG ke PowerPoint dan PNG ke PowerPoint—yang memungkinkan orang membuat presentasi dengan cepat dari gambar.Buat Bingkai Gambar
- Buat instance dari kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Buat objek IPPImage dengan menambahkan gambar ke IImagescollection yang terkait dengan objek presentasi yang akan digunakan untuk mengisi bentuk.
- Tentukan lebar dan tinggi gambar.
- Buat sebuah PictureFrame berdasarkan lebar dan tinggi gambar melalui metode
AddPictureFrameyang disediakan oleh objek shape yang terkait dengan slide yang direferensikan. - Tambahkan bingkai gambar (yang berisi gambar) ke slide.
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode Java berikut menunjukkan cara membuat bingkai gambar:
// Membuat instance kelas Presentation yang mewakili file PPTX
Presentation pres = new Presentation();
try {
// Mendapatkan slide pertama
ISlide sld = pres.getSlides().get_Item(0);
// Membuat instance kelas Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Menambahkan bingkai gambar dengan tinggi dan lebar gambar yang setara
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Menulis file PPTX ke disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Buat Bingkai Gambar dengan Skala Relatif
- Buat instance dari kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Tambahkan gambar ke koleksi gambar presentasi.
- Buat objek IPPImage dengan menambahkan gambar ke IImagescollection yang terkait dengan objek presentasi yang akan digunakan untuk mengisi bentuk.
- Tentukan lebar dan tinggi relatif gambar dalam bingkai gambar.
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode Java berikut menunjukkan cara membuat bingkai gambar dengan skala relatif:
// Membuat instance kelas Presentation yang mewakili file PPTX
Presentation pres = new Presentation();
try {
// Mendapatkan slide pertama
ISlide sld = pres.getSlides().get_Item(0);
// Membuat instance kelas Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Tambahkan Bingkai Gambar dengan tinggi dan lebar yang setara dengan Gambar
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Mengatur skala relatif lebar dan tinggi
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// Menulis file PPTX ke disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Ekstrak Gambar Raster dari Bingkai Gambar
Anda dapat mengekstrak gambar raster dari objek PictureFrame dan menyimpannya dalam format PNG, JPG, dan format lainnya. Contoh kode di bawah menunjukkan cara mengekstrak gambar dari dokumen “sample.pptx” dan menyimpannya dalam format PNG.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
IShape firstShape = firstSlide.getShapes().get_Item(0);
if (firstShape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) firstShape;
try {
IImage slideImage = pictureFrame.getPictureFormat().getPicture().getImage().getImage();
slideImage.save("slide_1_shape_1.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
}
} catch (IOException e) {
} finally {
presentation.dispose();
}
Ekstrak Gambar SVG dari Bingkai Gambar
Ketika sebuah presentasi berisi grafik SVG yang ditempatkan di dalam bentuk PictureFrame , Aspose.Slides untuk Android via Java memungkinkan Anda mengambil kembali gambar vektor asli dengan fidelitas penuh. Dengan menelusuri koleksi bentuk slide, Anda dapat mengidentifikasi setiap PictureFrame, memeriksa apakah IPPImage yang mendasarinya berisi konten SVG, dan kemudian menyimpan gambar tersebut ke disk atau aliran dalam format SVG aslinya.
Contoh kode berikut menunjukkan cara mengekstrak gambar SVG dari sebuah bingkai gambar:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IPictureFrame) {
IPictureFrame pictureFrame = (IPictureFrame) shape;
ISvgImage svgImage = pictureFrame.getPictureFormat().getPicture().getImage().getSvgImage();
FileOutputStream fos = new FileOutputStream("output.svg");
fos.write(svgImage.getSvgData());
fos.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
presentation.dispose();
}
Dapatkan Transparansi Gambar
Aspose.Slides memungkinkan Anda memperoleh efek transparansi yang diterapkan pada gambar. Kode Java berikut menunjukkan operasi tersebut:
Presentation presentation = new Presentation("Test.pptx");
var pictureFrame = (IPictureFrame) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
var imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (var effect : imageTransform) {
if (effect instanceof IAlphaModulateFixed) {
var alphaModulateFixed = (IAlphaModulateFixed) effect;
var transparencyValue = 100 - alphaModulateFixed.getAmount();
System.out.println("Picture transparency: " + transparencyValue);
}
}
Dapatkan Kecerahan dan Kontras Gambar
Aspose.Slides memungkinkan Anda memperoleh efek kecerahan dan kontras yang diterapkan pada gambar. Antarmuka ILuminance mewakili efek transformasi gambar ini.
Kode Java berikut menunjukkan cara mendapatkan pengaturan kecerahan dan kontras dari sebuah bingkai gambar:
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame) shape;
IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
for (IImageTransformOperation effect : imageTransform) {
if (effect instanceof ILuminance) {
ILuminanceEffectiveData luminance = ((ILuminance) effect).getEffective();
float brightness = luminance.getBrightness();
float contrast = luminance.getContrast();
System.out.println("Brightness: " + brightness);
System.out.println("Contrast: " + contrast);
}
}
} finally {
presentation.dispose();
}
Pemformatan Bingkai Gambar
Aspose.Slides menyediakan banyak opsi pemformatan yang dapat diterapkan pada bingkai gambar. Dengan menggunakan opsi-opsi tersebut, Anda dapat mengubah bingkai gambar agar sesuai dengan persyaratan tertentu.
- Buat instance dari kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Buat objek IPPImage dengan menambahkan gambar ke IImagescollection yang terkait dengan objek presentasi yang akan digunakan untuk mengisi bentuk.
- Tentukan lebar dan tinggi gambar.
- Buat sebuah
PictureFrameberdasarkan lebar dan tinggi gambar melalui metode AddPictureFrame yang disediakan oleh objek IShapes yang terkait dengan slide yang direferensikan. - Tambahkan bingkai gambar (yang berisi gambar) ke slide.
- Atur warna garis bingkai gambar.
- Atur lebar garis bingkai gambar.
- Putar bingkai gambar dengan memberikan nilai positif atau negatif.
- Nilai positif memutar gambar searah jarum jam.
- Nilai negatif memutar gambar berlawanan arah jarum jam.
- Tambahkan bingkai gambar (yang berisi gambar) ke slide.
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode Java berikut menunjukkan proses pemformatan bingkai gambar:
// Membuat instance kelas Presentation yang mewakili file PPTX
Presentation pres = new Presentation();
try {
// Mendapatkan slide pertama
ISlide sld = pres.getSlides().get_Item(0);
// Membuat instance kelas Image
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Menambahkan Bingkai Gambar dengan tinggi dan lebar yang setara dengan Gambar
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Menerapkan beberapa pemformatan pada PictureFrameEx
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// Menulis file PPTX ke disk
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tip
Aspose baru-baru ini mengembangkan Collage Maker gratis. Jika Anda pernah perlu menggabungkan gambar JPG/JPEG atau PNG, membuat grid dari foto, Anda dapat menggunakan layanan ini.Tambahkan Gambar sebagai Tautan
Untuk menghindari ukuran presentasi yang besar, Anda dapat menambahkan gambar (atau video) melalui tautan alih-alih menyematkan file secara langsung ke dalam presentasi. Kode Java berikut menunjukkan cara menambahkan gambar dan video ke placeholder:
Presentation presentation = new Presentation("input.pptx");
try {
ArrayList<IShape> shapesToRemove = new ArrayList<IShape>();
int shapesCount = presentation.getSlides().get_Item(0).getShapes().size();
for (int i = 0; i < shapesCount; i++)
{
IShape autoShape = presentation.getSlides().get_Item(0).getShapes().get_Item(i);
if (autoShape.getPlaceholder() == null)
{
continue;
}
switch (autoShape.getPlaceholder().getType())
{
case PlaceholderType.Picture:
IPictureFrame 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:
IVideoFrame 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 (IShape shape : shapesToRemove)
{
presentation.getSlides().get_Item(0).getShapes().remove(shape);
}
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
Potong Gambar
Kode Java berikut menunjukkan cara memotong gambar yang ada pada slide:
Presentation pres = new Presentation();
// Membuat objek gambar baru
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Menambahkan PictureFrame ke Slide
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Memotong gambar (nilai persentase)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Menyimpan hasil
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Hapus Area yang Dipotong dari Gambar
Jika Anda ingin menghapus area yang dipotong dari gambar yang terdapat dalam bingkai, Anda dapat menggunakan metode deletePictureCroppedAreas() . Metode ini mengembalikan gambar yang dipotong atau gambar asli jika pemotongan tidak diperlukan.
Kode Java berikut menunjukkan operasi tersebut:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Mendapatkan PictureFrame dari slide pertama
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Menghapus area terpotong dari gambar PictureFrame dan mengembalikan gambar yang dipotong
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Menyimpan hasil
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
NOTE
deletePictureCroppedAreas() menambahkan gambar yang dipotong ke koleksi gambar presentasi. Jika gambar hanya digunakan dalam PictureFrame yang diproses, pengaturan ini dapat mengurangi ukuran presentasi. Jika tidak, jumlah gambar dalam presentasi yang dihasilkan akan meningkat.
Metode ini mengonversi berkas metafile WMF/EMF menjadi gambar PNG raster pada operasi pemotongan.
Kompres Gambar
Anda dapat mengompres gambar dalam sebuah presentasi menggunakan metode IPictureFillFormat.compressImage . Metode ini mengompres gambar dengan mengurangi ukurannya berdasarkan ukuran bentuk dan resolusi yang ditentukan, dengan opsi menghapus area yang dipotong.
Metode ini menyesuaikan ukuran dan resolusi gambar serupa dengan fitur Picture Format > Compress Pictures > Resolution di PowerPoint.
Contoh Java berikut menunjukkan cara mengompres gambar dalam presentasi dengan menentukan resolusi target dan secara opsional menghapus area yang dipotong:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Kompres gambar dengan resolusi target 150 DPI (resolusi Web) dan hapus area yang dipotong.
boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
// Periksa hasil kompresi.
if (result) {
System.out.println("Image successfully compressed.");
} else {
System.out.println("Image compression failed or no changes were necessary.");
}
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Atau menggunakan nilai DPI khusus secara langsung:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Kompres gambar ke 150 DPI (resolusi web), menghapus area yang dipotong.
pictureFrame.getPictureFormat().compressImage(true, 150f);
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
NOTE
Metode ini mengonversi gambar ke resolusi lebih rendah berdasarkan ukuran bentuk dan DPI yang diberikan. Region yang dipotong juga dapat dihapus untuk mengoptimalkan ukuran file.Jika gambar berupa metafile (WMF/EMF) atau SVG, kompresi tidak akan diterapkan. Selain itu, kualitas JPEG dipertahankan atau sedikit berkurang berdasarkan resolusi, serupa dengan cara PowerPoint menangani JPEG beresolusi tinggi.
Kunci Rasio Aspek
Jika Anda ingin sebuah bentuk yang berisi gambar mempertahankan rasio aspeknya bahkan setelah mengubah dimensi gambar, Anda dapat menggunakan metode setAspectRatioLocked untuk mengatur pengaturan Lock Aspect Ratio.
Kode Java berikut menunjukkan cara mengunci rasio aspek sebuah bentuk:
Presentation pres = new Presentation("pres.pptx");
try {
ILayoutSlide layout = pres.getLayoutSlides().getByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.getSlides().addEmptySlide(layout);
IPPImage picture;
IImage image = Images.fromFile("image.png");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
IPictureFrame pictureFrame = emptySlide.getShapes().addPictureFrame(
ShapeType.Rectangle, 50, 150, presImage.getWidth(), presImage.getHeight(), picture);
// atur bentuk agar mempertahankan rasio aspek saat mengubah ukuran
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
NOTE
Pengaturan Lock Aspect Ratio ini hanya mempertahankan rasio aspek bentuk dan bukan gambar yang dikandungnya.Gunakan Properti StretchOff
Dengan menggunakan properti StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight dan StretchOffsetBottom dari antarmuka IPictureFillFormat dan kelas PictureFillFormat, Anda dapat menentukan sebuah persegi panjang pengisian.
Ketika perataan (stretching) ditentukan untuk sebuah gambar, persegi panjang sumber diskalakan untuk menyesuaikan persegi panjang pengisian yang ditentukan. Setiap tepi persegi panjang pengisian didefinisikan oleh offset persentase dari tepi yang sesuai pada kotak pembatas bentuk. Persentase positif menunjukkan inset sementara persentase negatif menunjukkan outset.
- Buat instance dari kelas Presentation.
- Dapatkan referensi slide melalui indeksnya.
- Tambahkan persegi panjang
AutoShape. - Buat gambar.
- Atur tipe isi bentuk.
- Atur mode isi gambar bentuk.
- Tambahkan gambar yang ditetapkan untuk mengisi bentuk.
- Tentukan offset gambar dari tepi yang sesuai pada kotak pembatas bentuk
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode Java berikut menunjukkan proses di mana properti StretchOff digunakan:
// Membuat instance kelas Presentation yang mewakili file PPTX
Presentation pres = new Presentation();
try {
// Mendapatkan slide pertama
ISlide slide = pres.getSlides().get_Item(0);
// Membuat instance kelas ImageEx
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Menambahkan AutoShape dengan tipe Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Mengatur tipe isian bentuk
aShape.getFillFormat().setFillType(FillType.Picture);
// Mengatur mode isian gambar bentuk
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Mengatur gambar untuk mengisi bentuk
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Menentukan offset gambar dari tepi yang sesuai pada kotak pembatas bentuk
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
// Menulis file PPTX ke disk
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Bagaimana saya dapat mengetahui format gambar apa yang didukung untuk PictureFrame?
Aspose.Slides mendukung baik gambar raster (PNG, JPEG, BMP, GIF, dll.) maupun gambar vektor (misalnya SVG) melalui objek gambar yang ditetapkan ke PictureFrame. Daftar format yang didukung umumnya tumpang tindih dengan kemampuan mesin konversi slide dan gambar.
Bagaimana penambahan puluhan gambar besar akan memengaruhi ukuran dan kinerja PPTX?
Menyematkan gambar besar meningkatkan ukuran file dan penggunaan memori; menautkan gambar membantu menjaga ukuran presentasi tetap kecil namun memerlukan file eksternal tetap dapat diakses. Aspose.Slides menyediakan kemampuan menambahkan gambar melalui tautan untuk mengurangi ukuran file.
Bagaimana saya dapat mengunci objek gambar agar tidak secara tidak sengaja dipindahkan/diresize?
Gunakan shape locks untuk sebuah PictureFrame (misalnya, menonaktifkan pemindahan atau pengubahan ukuran). Mekanisme penguncian ini didukung untuk berbagai jenis bentuk, termasuk PictureFrame.
Apakah fidelitas vektor SVG dipertahankan saat mengekspor presentasi ke PDF/gambar?
Aspose.Slides memungkinkan mengekstrak SVG dari PictureFrame sebagai vektor asli. Saat mengekspor ke PDF atau format raster, hasilnya mungkin rasterisasi tergantung pada pengaturan ekspor; fakta bahwa SVG asli disimpan sebagai vektor dikonfirmasi oleh perilaku ekstraksi.