Android'de Sunumlarda Resim Çerçevelerini Yönetme
Giriş
Resim çerçevesi, bir görüntüyü içeren bir şekildir—tıpkı çerçevedeki bir resim gibi.
Bir slayta resim çerçevesi aracılığıyla bir görüntü ekleyebilirsiniz. Böylece, resim çerçevesini biçimlendirerek görüntüyü de biçimlendirmiş olursunuz.
Tip
Aspose ücretsiz dönüştürücüler—JPEG to PowerPoint ve PNG to PowerPoint—sağlar; bu sayede kullanıcılar görüntülerden hızlıca sunumlar oluşturabilir.Resim Çerçevesi Oluşturma
- Bir Presentation sınıfının bir örneğini oluşturun.
- Bir slaydın referansını dizini aracılığıyla alın.
- Şekli doldurmak için kullanılacak sunum nesnesine bağlı IImagescollection‘a bir görüntü ekleyerek bir IPPImage nesnesi oluşturun.
- Görüntünün genişlik ve yüksekliğini belirtin.
- Referans alınan slayda bağlı şekil nesnesinin sunduğu
AddPictureFrameyöntemiyle görüntünün genişlik ve yüksekliğine dayalı bir PictureFrame oluşturun. - Slayta bir resim çerçevesi (resmi içeren) ekleyin.
- Değiştirilmiş sunumu bir PPTX dosyası olarak yazın.
Bu Java kodu, bir resim çerçevesi nasıl oluşturulacağını gösterir:
// PPTX dosyasını temsil eden Presentation sınıfını örnekler
Presentation pres = new Presentation();
try {
// İlk slaytı alır
ISlide sld = pres.getSlides().get_Item(0);
// Image sınıfını örnekler
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Resmin eşdeğer yüksekliği ve genişliğiyle bir resim çerçevesi ekler
sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// PPTX dosyasını diske yazar
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Göreceli Ölçekli Resim Çerçevesi Oluşturma
- Bir Presentation sınıfının bir örneğini oluşturun.
- Bir slaydın referansını dizini aracılığıyla alın.
- Sunumun görüntü koleksiyonuna bir görüntü ekleyin.
- Şekli doldurmak için kullanılacak sunum nesnesine bağlı IImagescollection‘a bir görüntü ekleyerek bir IPPImage nesnesi oluşturun.
- Resim çerçevesinde görüntünün göreceli genişlik ve yüksekliğini belirtin.
- Değiştirilmiş sunumu bir PPTX dosyası olarak yazın.
Bu Java kodu, göreceli ölçekle bir resim çerçevesi nasıl oluşturulacağını gösterir:
// PPTX'i temsil eden Presentation sınıfını örnekle
Presentation pres = new Presentation();
try {
// İlk slaytı al
ISlide sld = pres.getSlides().get_Item(0);
// Image sınıfını örnekle
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Resmin yüksekliği ve genişliğiyle eşdeğer bir Resim Çerçevesi ekle
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// Göreceli ölçek genişliğini ve yüksekliğini ayarla
pf.setRelativeScaleHeight(0.8f);
pf.setRelativeScaleWidth(1.35f);
// PPTX dosyasını diske yaz
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Resim Çerçevelerinden Raster Görüntüleri Çıkarma
PictureFrame nesnelerinden raster görüntüleri çıkarabilir ve PNG, JPG ve diğer formatlarda kaydedebilirsiniz. Aşağıdaki kod örneği, “sample.pptx” belgesinden bir görüntüyü çıkarıp PNG formatında kaydetmeyi gösterir.
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();
}
Resim Çerçevelerinden SVG Görüntüleri Çıkarma
Bir sunum, PictureFrame şekilleri içinde yer alan SVG grafikler içerdiğinde, Aspose.Slides for Android via Java, orijinal vektör görüntülerini tam doğrulukla almanıza olanak tanır. Slaydın şekil koleksiyonunu dolaşarak her bir PictureFrame nesnesini tanımlayabilir, altındaki IPPImage‘in SVG içerip içermediğini kontrol edebilir ve ardından bu görüntüyü yerel SVG formatında diske veya akıma kaydedebilirsiniz.
Aşağıdaki kod örneği, bir resim çerçevesinden SVG görüntüsü nasıl çıkarılacağını gösterir:
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();
}
Bir Görüntünün Şeffaflığını Almak
Aspose.Slides, bir görüntüye uygulanan şeffaflık efektini almanıza izin verir. Bu Java kodu işlemi gösterir:
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);
}
}
Bir Görüntünün Parlaklık ve Kontrastını Almak
Aspose.Slides, bir görüntüye uygulanan parlaklık ve kontrast efektini almanıza izin verir. ILuminance arabirimi bu görüntü dönüşüm efektini temsil eder.
Bu Java kodu, bir resim çerçevesinden parlaklık ve kontrast ayarlarını nasıl alacağınızı gösterir:
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();
}
Resim Çerçevesi Biçimlendirme
Aspose.Slides, bir resim çerçevesine uygulanabilen birçok biçimlendirme seçeneği sunar. Bu seçenekleri kullanarak, bir resim çerçevesini belirli gereksinimlere uygun hale getirebilirsiniz.
- Bir Presentation sınıfının bir örneğini oluşturun.
- Bir slaydın referansını dizini aracılığıyla alın.
- Şekli doldurmak için kullanılacak sunum nesnesine bağlı IImagescollection‘a bir görüntü ekleyerek bir IPPImage nesnesi oluşturun.
- Görüntünün genişlik ve yüksekliğini belirtin.
- Referans alınan slayda bağlı IShapes nesnesinin sunduğu AddPictureFrame yöntemiyle görüntünün genişlik ve yüksekliğine dayalı bir
PictureFrameoluşturun. - Resim çerçevesini (resmi içeren) slayta ekleyin.
- Resim çerçevesinin kenar rengini ayarlayın.
- Resim çerçevesinin kenar kalınlığını ayarlayın.
- Resim çerçevesini pozitif ya da negatif bir değer vererek döndürün.
- Pozitif bir değer görüntüyü saat yönünde döndürür.
- Negatif bir değer görüntüyü saat yönünün tersine döndürür.
- Resim çerçevesini (resmi içeren) slayta ekleyin.
- Değiştirilmiş sunumu bir PPTX dosyası olarak yazın.
Bu Java kodu, resim çerçevesi biçimlendirme sürecini gösterir:
// PPTX'i temsil eden Presentation sınıfını örnekler
Presentation pres = new Presentation();
try {
// İlk slaytı al
ISlide sld = pres.getSlides().get_Item(0);
// Image sınıfını örnekler
IPPImage imgx = pres.getImages().addImage(new FileInputStream(new File("asp1.jpg")));
// Resmin yüksekliği ve genişliğiyle eşdeğer bir Resim Çerçevesi ekler
IPictureFrame pf = sld.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 150, imgx.getWidth(), imgx.getHeight(), imgx);
// PictureFrameEx'e bazı biçimlendirmeler uygular
pf.getLineFormat().getFillFormat().setFillType(FillType.Solid);
pf.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
pf.getLineFormat().setWidth(20);
pf.setRotation(45);
// PPTX dosyasını diske yazar
pres.save("RectPicFrame.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Tip
Aspose yakın zamanda bir free Collage Maker geliştirdi. JPG/JPEG veya PNG görüntülerini birleştirmeniz, fotoğraflardan ızgara oluşturmanız gerektiğinde bu hizmeti kullanabilirsiniz.Bir Görüntüyü Bağlantı Olarak Ekle
Sunum dosyalarının boyutunu büyük tutmamak için, dosyaları doğrudan gömmek yerine bağlantılar aracılığıyla resim (veya video) ekleyebilirsiniz. Bu Java kodu, bir yer tutucuya nasıl görüntü ve video ekleneceğini gösterir:
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();
}
Görüntüleri Kesme
Bu Java kodu, bir slayttaki mevcut bir görüntünün nasıl kırpılacağını gösterir:
Presentation pres = new Presentation();
// Yeni görüntü nesnesi oluşturur
try {
IPPImage picture;
IImage image = Images.fromFile(imagePath);
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Bir slayta PictureFrame ekler
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, picture);
// Görüntüyü kırpar (yüzde değerleri)
picFrame.getPictureFormat().setCropLeft(23.6f);
picFrame.getPictureFormat().setCropRight(21.5f);
picFrame.getPictureFormat().setCropTop(3);
picFrame.getPictureFormat().setCropBottom(31);
// Sonucu kaydeder
pres.save(outPptxFile, SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Bir Resmin Kırpılmış Alanlarını Silme
Bir çerçevede bulunan görüntünün kırpılmış alanlarını silmek istiyorsanız, deletePictureCroppedAreas() yöntemini kullanabilirsiniz. Bu yöntem, kırpma gereksizse orijinal görüntüyü, aksi takdirde kırpılmış görüntüyü döndürür.
Bu Java kodu işlemi gösterir:
Presentation presentation = new Presentation("PictureFrameCrop.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// İlk slayttan PictureFrame'i alır
IPictureFrame picFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// PictureFrame görüntüsünün kırpılmış alanlarını siler ve kırpılmış görüntüyü döndürür
IPPImage croppedImage = picFrame.getPictureFormat().deletePictureCroppedAreas();
// Sonucu kaydeder
presentation.save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
NOTE
deletePictureCroppedAreas() yöntemi kırpılmış görüntüyü sunumun görüntü koleksiyonuna ekler. Görüntü yalnızca işlenen PictureFrame içinde kullanılıyorsa, bu yapılandırma sunum boyutunu azaltabilir. Aksi takdirde, ortaya çıkan sunumdaki görüntü sayısı artar.Bu yöntem, kırpma işlemi sırasında WMF/EMF metafile’larını raster PNG görüntüsüne dönüştürür.
Görüntüleri Sıkıştırma
Bir sunumdaki resmi, IPictureFillFormat.compressImage yöntemiyle sıkıştırabilirsiniz. Bu yöntem, şekil boyutuna ve belirtilen çözünürlüğe göre görüntünün boyutunu azaltarak, isteğe bağlı olarak kırpılmış alanları silme seçeneği sunar.
Resmin boyut ve çözünürlüğünü, PowerPoint’ın Picture Format > Compress Pictures > Resolution özelliğine benzer şekilde ayarlar.
Aşağıdaki Java örnekleri, hedef bir çözünürlük belirleyerek ve isteğe bağlı olarak kırpılmış alanları kaldırarak bir sunumdaki görüntünün nasıl sıkıştırılacağını gösterir:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Görüntüyü 150 DPI (Web çözünürlüğü) hedef çözünürlükte sıkıştır ve kırpılmış alanları kaldır.
boolean result = pictureFrame.getPictureFormat().compressImage(true, PicturesCompression.Dpi150);
// Sıkıştırma sonucunu kontrol et.
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();
}
Veya doğrudan özel bir DPI değeri kullanarak:
Presentation presentation = new Presentation("demo.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IPictureFrame pictureFrame = (IPictureFrame)slide.getShapes().get_Item(0);
// Görüntüyü 150 DPI (web çözünürlüğü) sıkıştır, kırpılmış alanları kaldır.
pictureFrame.getPictureFormat().compressImage(true, 150f);
presentation.save("CompressedImage.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
NOTE
Yöntem, görüntüyü şeklin boyutuna ve verilen DPI değerine göre daha düşük bir çözünürlüğe dönüştürür. Dosya boyutunu optimize etmek için kırpılmış bölgeler de silinebilir.Görüntü bir metafile (WMF/EMF) veya SVG ise sıkıştırma uygulanmaz. Ayrıca, JPEG kalitesi çözünürlüğe göre korunur ya da hafifçe düşürülür; bu, PowerPoint’ın yüksek çözünürlüklü JPEG’leri nasıl işlediğine benzer.
En-Boy Oranını Kilitlemek
Bir şekil içinde bulunan görüntünün, görüntü boyutları değiştirildiğinde bile en-boy oranını korumasını istiyorsanız, Lock Aspect Ratio ayarını yapmak için setAspectRatioLocked yöntemini kullanabilirsiniz.
Bu Java kodu, bir şeklin en‑boy oranını nasıl kilitleyeceğinizi gösterir:
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);
// Şeklin yeniden boyutlandırıldığında en-boy oranını korumasını ayarla
pictureFrame.getPictureFrameLock().setAspectRatioLocked(true);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
NOTE
Bu Lock Aspect Ratio ayarı yalnızca şeklin en‑boy oranını korur, içinde bulunan görüntüyü değil.StretchOff Özelliğini Kullanma
IPictureFillFormat arabirimi ve PictureFillFormat sınıfından StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight ve StretchOffsetBottom özelliklerini kullanarak bir doldurma dikdörtgeni belirtebilirsiniz.
Bir görüntü için germe (stretch) belirtildiğinde, kaynak dikdörtgen belirtilen doldurma dikdörtgenine sığacak şekilde ölçeklendirilir. Doldurma dikdörtgeninin her kenarı, şeklin sınırlayıcı kutusunun ilgili kenarından yüzde olarak bir ofsetle tanımlanır. Pozitif yüzde bir içeriği, negatif yüzde bir dışarıyı gösterir.
- Bir Presentation sınıfının bir örneğini oluşturun.
- Bir slaydın referansını dizini aracılığıyla alın.
- Bir
AutoShapedikdörtgen ekleyin. - Bir görüntü oluşturun.
- Şeklin dolgu tipini ayarlayın.
- Şeklin resim dolgu modunu ayarlayın.
- Şekli dolduracak bir görüntü ekleyin.
- Görüntünün, şeklin sınırlayıcı kutusunun ilgili kenarından ofsetlerini belirtin.
- Değiştirilmiş sunumu bir PPTX dosyası olarak yazın.
Bu Java kodu, StretchOff özelliğinin kullanıldığı bir süreci gösterir:
// PPTX dosyasını temsil eden Presentation sınıfını örnekler
Presentation pres = new Presentation();
try {
// İlk slaytı alır
ISlide slide = pres.getSlides().get_Item(0);
// ImageEx sınıfını örnekler
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Rectangle olarak ayarlanmış bir AutoShape ekler
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Şeklin doldurma tipini ayarlar
aShape.getFillFormat().setFillType(FillType.Picture);
// Şeklin resim doldurma modunu ayarlar
aShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
// Şekli dolduracak resmi ayarlar
aShape.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// Görüntünün, şeklin sınırlayıcı kutusunun ilgili kenarından ofsetlerini belirtir
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetLeft(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetRight(25);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetTop(-20);
aShape.getFillFormat().getPictureFillFormat().setStretchOffsetBottom(-10);
//Writes PPTX dosyasını diske yazar
pres.save("StretchOffsetLeftForPictureFrame_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
SSS
Resim çerçevesi için hangi görüntü formatlarının desteklendiğini nasıl öğrenebilirim?
Aspose.Slides, bir PictureFrame‘e atanan görüntü nesnesi aracılığıyla raster görüntüler (PNG, JPEG, BMP, GIF vb.) ve vektör görüntüler (ör. SVG) destekler. Desteklenen format listesi genellikle slayt ve görüntü dönüştürme motorunun yetenekleriyle örtüşür.
Yüzlerce büyük görüntü eklemek PPTX dosya boyutu ve performansını nasıl etkiler?
Büyük görüntüleri gömmek dosya boyutunu ve bellek kullanımını artırır; görüntülere bağlantı vermek sunum boyutunu düşük tutar ancak dış dosyaların erişilebilir olmasını gerektirir. Aspose.Slides, dosya boyutunu azaltmak için görüntüleri bağlantı olarak ekleme imkanı sunar.
Bir görüntü nesnesinin yanlışlıkla taşınmasını/yeniden boyutlandırılmasını nasıl kilitleyebilirim?
shape locks kullanarak bir PictureFrame‘i (ör. hareket ettirmeyi veya yeniden boyutlandırmayı devre dışı bırakma) kilitleyebilirsiniz. Kilitleme mekanizması, PictureFrame dahil birçok şekil türü için desteklenir.
SVG vektör doğruluğu PDF/görüntülere dışa aktarırken korunuyor mu?
Aspose.Slides, bir PictureFrame‘den SVG’yi orijinal vektör olarak çıkarabilir. PDF’ye dışa aktarma veya raster formatlarına dönüştürülürken, sonuç dışa aktarım ayarlarına bağlı olarak rasterleştirilebilir; ancak orijinal SVG’nin vektör olarak saklandığı çıkarma davranışıyla doğrulanır.