Kelola Bingkai Gambar dalam Presentasi di .NET
Pendahuluan
Bingkai gambar adalah bentuk yang berisi sebuah gambar—seperti sebuah foto dalam 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 Presentation class.
- 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 PictureFrame berdasarkan lebar dan tinggi gambar melalui metode
AddPictureFrameyang disediakan oleh objek bentuk yang terkait dengan slide yang direferensikan. - Tambahkan bingkai gambar (yang berisi gambar) ke slide.
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode C# ini menunjukkan cara membuat bingkai gambar:
// Menginstansiasi kelas Presentation yang mewakili file PPTX
using (Presentation pres = new Presentation())
{
// Mendapatkan slide pertama
ISlide slide = pres.Slides[0];
// Memuat gambar dan menambahkannya ke koleksi gambar presentasi
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Menambahkan bingkai gambar dengan tinggi dan lebar yang sama
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Menerapkan beberapa pemformatan pada bingkai gambar
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Menulis presentasi ke file PPTX
pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
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 C# ini menunjukkan cara membuat bingkai gambar dengan skala relatif:
// Menginstansiasi kelas Presentation yang mewakili file PPTX
using (Presentation presentation = new Presentation())
{
// Memuat gambar dan menambahkannya ke koleksi gambar presentasi
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Menambahkan bingkai gambar ke slide
IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Mengatur lebar dan tinggi skala relatif
pictureFrame.RelativeScaleHeight = 0.8f;
pictureFrame.RelativeScaleWidth = 1.35f;
// Menyimpan presentasi
presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}
Ekstrak Gambar Raster dari Bingkai Gambar
Anda dapat mengekstrak gambar raster dari objek PictureFrame dan menyimpannya dalam format PNG, JPG, dan lainnya. Contoh kode di bawah menunjukkan cara mengekstrak gambar dari dokumen “sample.pptx” dan menyimpannya dalam format PNG.
using (var presentation = new Presentation("sample.pptx"))
{
var firstSlide = presentation.Slides[0];
var firstShape = firstSlide.Shapes[0];
if (firstShape is IPictureFrame pictureFrame)
{
var image = pictureFrame.PictureFormat.Picture.Image.SystemImage;
image.Save("slide_1_shape_1.png", ImageFormat.Png);
}
}
Ekstrak Gambar SVG dari Bingkai Gambar
Ketika sebuah presentasi berisi grafik SVG yang ditempatkan di dalam bentuk PictureFrame, Aspose.Slides untuk .NET memungkinkan Anda mengambil 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 memperlihatkan cara mengekstrak gambar SVG dari sebuah bingkai gambar:
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var shape = slide.Shapes[0];
if (shape is IPictureFrame pictureFrame)
{
var svgImage = pictureFrame.PictureFormat.Picture.Image.SvgImage;
if (svgImage != null)
{
File.WriteAllText("output.svg", svgImage.SvgContent);
}
}
Dapatkan Transparansi Gambar
Aspose.Slides memungkinkan Anda mendapatkan efek transparansi yang diterapkan pada gambar. Kode C# ini menunjukkan operasi tersebut:
using (var presentation = new Presentation("Test.pptx"))
{
var pictureFrame = (IPictureFrame)presentation.Slides[0].Shapes[0];
var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
foreach (var effect in imageTransform)
{
if (effect is IAlphaModulateFixed alphaModulateFixed)
{
var transparencyValue = 100 - alphaModulateFixed.Amount;
Console.WriteLine("Picture transparency: " + transparencyValue);
}
}
}
Dapatkan Kecerahan dan Kontras Gambar
Aspose.Slides memungkinkan Anda mendapatkan efek kecerahan dan kontras yang diterapkan pada gambar. Antarmuka ILuminance mewakili efek transformasi gambar ini.
Kode C# ini menunjukkan cara mendapatkan pengaturan kecerahan dan kontras dari sebuah bingkai gambar:
using (var presentation = new Presentation("sample.pptx"))
{
var slide = presentation.Slides[0];
var shape = slide.Shapes[0];
var pictureFrame = (IPictureFrame)shape;
var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
foreach (var effect in imageTransform)
{
if (effect is ILuminance luminanceEffect)
{
var luminance = luminanceEffect.GetEffective();
var brightness = luminance.Brightness;
var contrast = luminance.Contrast;
Console.WriteLine("Brightness: " + brightness);
Console.WriteLine("Contrast: " + contrast);
}
}
}
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 kebutuhan 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
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.
- Setel warna garis bingkai gambar.
- Setel 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 C# ini memperlihatkan proses pemformatan bingkai gambar:
// Menginstansiasi kelas Presentation yang mewakili file PPTX
using (Presentation presentation = new Presentation())
{
// Mendapatkan slide pertama
ISlide slide = presentation.Slides[0];
// Memuat gambar dan menambahkannya ke koleksi gambar presentasi
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Menambahkan bingkai gambar dengan tinggi dan lebar yang setara dengan gambar
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Menerapkan beberapa pemformatan pada bingkai gambar
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Menulis presentasi ke file PPTX
presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Tambahkan Gambar sebagai Tautan
Jika Anda ingin menghindari ukuran presentasi yang besar, Anda dapat menambahkan gambar (atau video) melalui tautan alih-alih menyematkan file secara langsung ke dalam presentasi. Kode C# ini menunjukkan cara menambahkan gambar dan video ke dalam placeholder:
using (var presentation = new Presentation("input.pptx"))
{
var shapesToRemove = new List<IShape>();
int shapesCount = presentation.Slides[0].Shapes.Count;
for (var i = 0; i < shapesCount; i++)
{
var autoShape = presentation.Slides[0].Shapes[i];
if (autoShape.Placeholder == null)
{
continue;
}
switch (autoShape.Placeholder.Type)
{
case PlaceholderType.Picture:
var pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle,
autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, null);
pictureFrame.PictureFormat.Picture.LinkPathLong =
"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:
var videoFrame = presentation.Slides[0].Shapes.AddVideoFrame(
autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, "");
videoFrame.PictureFormat.Picture.LinkPathLong =
"https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg";
videoFrame.LinkPathLong = "https://youtu.be/t_1LYZ102RA";
shapesToRemove.Add(autoShape);
break;
}
}
foreach (var shape in shapesToRemove)
{
presentation.Slides[0].Shapes.Remove(shape);
}
presentation.Save("output.pptx", SaveFormat.Pptx);
}
Potong Gambar
Kode C# ini menunjukkan cara memotong gambar yang ada pada slide:
using (Presentation presentation = new Presentation())
{
// Membuat objek gambar baru
IImage image = Images.FromFile(imagePath);
IPPImage newImage = presentation.Images.AddImage(image);
image.Dispose();
// Menambahkan PictureFrame ke Slide
IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, newImage);
// Memotong gambar (nilai persentase)
picFrame.PictureFormat.CropLeft = 23.6f;
picFrame.PictureFormat.CropRight = 21.5f;
picFrame.PictureFormat.CropTop = 3;
picFrame.PictureFormat.CropBottom = 31;
// Menyimpan hasil
presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}
Hapus Area Terpotong pada Gambar
Jika Anda ingin menghapus area terpotong dari gambar yang terdapat dalam bingkai, Anda dapat menggunakan metode IPictureFillFormat.DeletePictureCroppedAreas. Metode ini mengembalikan gambar yang dipotong atau gambar asli jika pemotongan tidak diperlukan.
Kode C# ini menunjukkan operasi tersebut:
using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
ISlide slide = presentation.Slides[0];
// Mendapatkan PictureFrame dari slide pertama
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Menghapus area terpotong dari gambar PictureFrame dan mengembalikan gambar yang dipotong
IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();
// Menyimpan hasil
presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}
NOTE
Metode IPictureFillFormat.DeletePictureCroppedAreas menambahkan gambar terpotong 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 bertambah.
Metode ini mengonversi file metafile WMF/EMF menjadi gambar PNG raster dalam operasi pemotongan.
Kompres Gambar
Anda dapat mengompres gambar dalam presentasi menggunakan metode IPictureFillFormat.CompressImage. Metode ini mengompres gambar dengan mengurangi ukurannya berdasarkan ukuran bentuk dan resolusi yang ditentukan, dengan opsi menghapus area terpotong.
Ini menyesuaikan ukuran dan resolusi gambar mirip dengan fitur Picture Format → Compress Pictures → Resolution di PowerPoint.
Contoh C# berikut menunjukkan cara mengompres gambar dalam presentasi dengan menentukan resolusi target dan secara opsional menghapus area terpotong:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Kompres gambar dengan resolusi target 150 DPI (resolusi Web) dan hapus area terpotong.
bool result = pictureFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);
// Periksa hasil kompresi.
if (result)
{
Console.WriteLine("Image successfully compressed.");
}
else
{
Console.WriteLine("Image compression failed or no changes were necessary.");
}
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
Atau menggunakan nilai DPI kustom secara langsung:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Kompres gambar ke 150 DPI (resolusi web), menghapus area terpotong.
pictureFrame.PictureFormat.CompressImage(true, 150f);
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
NOTE
Metode ini mengonversi gambar ke resolusi lebih rendah berdasarkan ukuran bentuk dan DPI yang diberikan. Region terpotong 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 tergantung pada resolusi, mirip dengan cara PowerPoint menangani JPEG beresolusi tinggi.Kunci Rasio Aspek
Jika Anda ingin bentuk yang berisi gambar mempertahankan rasio aspeknya bahkan setelah mengubah dimensi gambar, Anda dapat menggunakan properti IPictureFrameLock.AspectRatioLocked untuk mengatur Lock Aspect Ratio.
Kode C# ini menunjukkan cara mengunci rasio aspek bentuk:
using (Presentation pres = new Presentation("pres.pptx"))
{
ILayoutSlide layout = pres.LayoutSlides.GetByType(SlideLayoutType.Custom);
ISlide emptySlide = pres.Slides.AddEmptySlide(layout);
IImage image = Images.FromFile("image.png");
IPPImage presImage = pres.Images.AddImage(image);
image.Dispose();
IPictureFrame pictureFrame = emptySlide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, presImage.Width, presImage.Height, presImage);
// Mengatur bentuk agar mempertahankan rasio aspek saat mengubah ukuran
pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}
NOTE
Pengaturan Lock Aspect Ratio ini hanya mempertahankan rasio aspek bentuk, bukan gambar yang dikandungnya.Gunakan Properti StretchOff
Dengan menggunakan properti StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight dan StretchOffsetBottom, dari antarmuka IPictureFillFormat serta kelas PictureFillFormat, Anda dapat menentukan persegi panjang isian.
Ketika peregangan ditentukan untuk sebuah gambar, persegi panjang sumber akan diubah skalanya agar sesuai dengan persegi panjang isian yang ditentukan. Setiap tepi persegi panjang isian didefinisikan oleh offset persentase dari tepi yang bersesuaian pada kotak pembatas bentuk. Persentase positif menunjukkan inset (penyusutan) sementara persentase negatif menunjukkan outset (penyebaran).
- Buat instance dari Presentation class.
- Dapatkan referensi slide melalui indeksnya.
- Tambahkan sebuah persegi
AutoShape. - Buat sebuah gambar.
- Atur jenis isi bentuk.
- Atur mode isi gambar bentuk.
- Tambahkan gambar yang diatur untuk mengisi bentuk.
- Tentukan offset gambar dari tepi yang bersesuaian pada kotak pembatas bentuk
- Tuliskan presentasi yang telah dimodifikasi sebagai file PPTX.
Kode C# ini memperlihatkan proses di mana properti StretchOff digunakan:
using (Presentation pres = new Presentation())
{
IImage image = Images.FromFile("image.png");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
IPictureFrame pictureFrame = pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 400, 400, ppImage);
// Mengatur gambar ditarik dari setiap sisi dalam badan bentuk
pictureFrame.PictureFormat.PictureFillMode = PictureFillMode.Stretch;
pictureFrame.PictureFormat.StretchOffsetLeft = 24;
pictureFrame.PictureFormat.StretchOffsetRight = 24;
pictureFrame.PictureFormat.StretchOffsetTop = 24;
pictureFrame.PictureFormat.StretchOffsetBottom = 24;
pres.Save("imageStretch.pptx", SaveFormat.Pptx);
}
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 pada sebuah PictureFrame. Daftar format yang didukung umumnya tumpang tindih dengan kemampuan mesin konversi slide dan gambar.
Bagaimana penambahan puluhan gambar berukuran besar 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 tergerak/diubah ukurannya secara tidak sengaja?
Gunakan kunci bentuk untuk PictureFrame (misalnya, menonaktifkan pemindahan atau pengubahan ukuran). Mekanisme penguncian dijelaskan untuk bentuk dalam artikel perlindungan terpisah dan didukung untuk berbagai jenis bentuk, termasuk PictureFrame.
Apakah fidelitas vektor SVG dipertahankan saat mengekspor presentasi ke PDF/gambar?
Aspose.Slides memungkinkan mengekstrak SVG dari sebuah PictureFrame sebagai vektor asli. Saat mengekspor ke PDF atau format raster, hasilnya dapat menjadi raster tergantung pada pengaturan ekspor; fakta bahwa SVG asli disimpan sebagai vektor dikonfirmasi oleh perilaku ekstraksi.