Presentasyonlarda Resim Çerçevelerini Python ile Yönetme

Genel Bakış

Bir resim çerçevesi, bir görüntüyü gösteren bir slayt şeklidir. Aspose.Slides’te, resim kaynağı ve onu gösteren şekil ayrı nesnelerdir: bir Presentation gömülü resim kaynaklarını ImageCollection aracılığıyla sahiplenir, bir PictureFrame ise resmin konumunu, boyutunu, çizgi biçimlendirmesini, döndürmeyi, kırpmayı, resim efektlerini ve diğer çerçeve‑düzeyindeki ayarları kontrol eder.

Aynı resim birden fazla kez gösterildiğinde bu ayrım yararlıdır. Resmi sunuma bir kez ekleyin, döndürülen PPImage nesnesini saklayın ve resim çerçeveleri oluştururken bu resim kaynağını kullanın.

Resim çerçeveleri PNG veya JPEG gibi raster görselleri ve SVG gibi vektör görselleri içerebilir. Ayrıca resmi sunuma gömmek yerine bağlantılı görsellere de başvurabilirler. Bu seçim taşınabilirlik, dosya boyutu, çıkarma ve dışa aktarma davranışını etkiler; bu nedenle biçimlendirme veya optimizasyon uygulamadan önce görselin nasıl saklanacağına karar vermek faydalıdır.

Gömülü Resim Ekleme ve Biçimlendirme

Gömülü bir görsel için, görsel verisini sunuma ekleyin ve bir resim çerçevesi oluşturmak için ShapeCollection.add_picture_frame kullanın. Görsel sunum paketinin bir parçası haline gelir, bu sayede sunum başka bir bilgisayara taşındığında kendi kendine yeterli kalır.

Aşağıdaki örnek bir JPEG görseli ekler, görselin yerel boyutlarında bir çerçeve oluşturur ve çizgi biçimlendirmesi ile döndürme uygular:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("photo.jpg") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 100, image.width, image.height, image)
    picture_frame.line_format.fill_format.fill_type = slides.FillType.SOLID
    picture_frame.line_format.fill_format.solid_fill_color.color = draw.Color.blue
    picture_frame.line_format.width = 3
    picture_frame.rotation = 15

    presentation.save("picture-frame.pptx", slides.export.SaveFormat.PPTX)

Resim çerçevesi görüntülenen geometrini kontrol eder; çerçeve boyutunu değiştirmek, gömülü görsel kaynağında saklanan özgün piksel boyutlarını değiştirmez. Bu ayrım, daha sonra bir görseli kırpma veya sıkıştırma yaparken önem kazanır.

Göreceli Ölçeği Kullanma

PictureFrame çerçeve için relative_scale_width ve relative_scale_height özelliklerini sunar. 1.0 değeri, orijinal resim boyutunun %100’üne karşılık gelir. Göreceli ölçek, bir iş akışının son boyutları elle hesaplamak yerine kaynak görsel boyutuyla olan ilişkiyi koruması gerektiğinde yararlıdır.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("photo.jpg") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)
    picture_frame.relative_scale_width = 1.35
    picture_frame.relative_scale_height = 0.8

    presentation.save("relative-scale.pptx", slides.export.SaveFormat.PPTX)

Göreceli ölçek çerçevenin ölçek ayarlarını değiştirir; gömülü görseli yeniden örneklemez veya sıkıştırmaz.

Gömülü ve Bağlantılı Görseller

Gömülü bir resim, görsel verisini doğrudan sunuma kaydeder ve bu nedenle taşınabilirlik ve tahmin edilebilir render için en güvenli seçimdir. Bağlantılı bir resim, Picture bağlantı yolu aracılığıyla dış bir konumu tutar; görsel verisi aynı şekilde gömülmez.

Bağlantılı görseller PPTX içinde saklanan görsel verisinin miktarını azaltabilir, ancak dış bir bağımlılık getirir. Bağlantılı dosya, sunumu açan veya render eden uygulama tarafından erişilebilir kalmalıdır. Yol değişirse, dosya taşınırsa veya kaynak bulunamazsa, bağlantılı görsel beklenildiği gibi görüntülenmeyebilir. E-posta ile gönderilmesi, arşivlenmesi veya izole ortamda render edilmesi gereken sunumlar için gömülü görseller genellikle daha güvenilirdir.

Bağlantılı Görsel Ekleme

Aşağıdaki örnek bir resim çerçevesi oluşturur ve onu yerel bir görsel dosyasına yönlendirir. Bu örnek yalnızca görsel bağlantısını ele alır; video bağlantısı ayrı bir medya iş akışıdır ve kasıtlı olarak bu örneğe dahil edilmemiştir.

import os
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 320, 180, None)
    linked_image_path = os.path.abspath("linked-image.jpg")
    picture_frame.picture_format.picture.link_path_long = linked_image_path

    presentation.save("linked-image.pptx", slides.export.SaveFormat.PPTX)

Dış dosya yönetimi kasıtlıysa bağlantıları kullanın. Sıkıştırma yerine sadece bir yedek olarak kullanmayın: kırık görsel bağımlılıklarına sahip küçük bir PPTX, büyük ve kendi kendine yeterli bir sunuma göre genellikle daha az kullanışlıdır.

Resim Çerçevelerinden Görselleri Çıkarma

Mevcut bir sunumdan görsel çıkarmadan önce, bir şeklin gerçekten bir PictureFrame olup olmadığını ve gömülü bir görsel içerip içermediğini kontrol edin. Bağlantılı resim çerçeveleri, aynı şekilde çıkarılabilecek görsel baytlarını içermeyebilir.

Raster Görsel Çıkarma

Modern görsel API’si doğrudan IImage kullanır. Aşağıdaki örnek bir slayttaki ilk gömülü raster resmi bulur ve PNG olarak kaydeder:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    for shape in slide.shapes:
        if not isinstance(shape, slides.PictureFrame):
            continue

        embedded_image = shape.picture_format.picture.image
        if embedded_image is None or embedded_image.svg_image is not None:
            continue

        raster_image = embedded_image.image
        raster_image.save("extracted-image.png", slides.ImageFormat.PNG)
        break

IImage üzerinden kaydetmek, çıkarılan görseli istenen çıktı formatına dönüştürür. Sunum içinde saklanan kodlanmış baytları (dönüştürülmüş raster dosyası yerine) elde etmeniz gerekiyorsa, PPImage.binary_data özelliğini kullanın.

SVG Görsel Çıkarma

SVG bir resim için, PPImage bir SvgImage nesnesi sunar. Bu, resmi önce rasterlaştırmadan SVG verisini doğrudan almanızı sağlar.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    for shape in slide.shapes:
        if not isinstance(shape, slides.PictureFrame):
            continue

        embedded_image = shape.picture_format.picture.image
        svg_image = embedded_image.svg_image if embedded_image is not None else None
        if svg_image is None:
            continue

        svg_data = bytes(svg_image.svg_data)
        with open("extracted-image.svg", "wb") as svg_stream:
            svg_stream.write(svg_data)
        break

SVG içeriğini SVG olarak tutmak, vektör kaynağını sunum içinde korur. PNG veya JPEG gibi raster dışa aktarımlar, bu vektör içeriğini piksellere dönüştürür. PDF veya SVG slayt dışa aktarma da bir render işlemidir; bu nedenle dışa aktarılan grafikler, orijinal gömülü SVG’nin bayt‑bayt kopyası olarak ele alınmamalıdır; orijinal vektör kaynağı gerektiğinde gömülü SvgImage.svg_data kullanılmalıdır.

Görseli Kırpma

Kırpma, bir görselin çerçeve içinde hangi kısmının görüneceğini değiştirir. PictureFillFormat üzerindeki kırpma değerleri, kaynak görselin boyutlarının yüzdesi olarak ifade edilir. Kırpma, gizli pikselleri gömülü görselden hemen silmez; yalnızca görünür bölgeyi değiştirir.

Aşağıdaki örnek bir resim çerçevesini güvenli bir şekilde bulur ve kırpma değerlerini uygular:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = None

    for shape in slide.shapes:
        if isinstance(shape, slides.PictureFrame):
            picture_frame = shape
            break

    if picture_frame is not None:
        picture_frame.picture_format.crop_left = 23.6
        picture_frame.picture_format.crop_right = 21.5
        picture_frame.picture_format.crop_top = 3
        picture_frame.picture_format.crop_bottom = 31
        presentation.save("cropped-image.pptx", slides.export.SaveFormat.PPTX)

Gizli görsel verisi hâlâ mevcut olduğundan, kırpma daha sonra orijinal pikselleri kaybetmeden değiştirilebilir. Dosya boyutu geri dönüşümden daha önemliyse, sonraki bölümde açıklanan gibi kırpılmış bölgeler fiziksel olarak kaldırılabilir.

Kırpılmış Görsel Verisini Kaldırma

PictureFillFormat.delete_picture_cropped_areas geçerli kırpma dikdörtgeninin dışındaki görsel verisini kaldırır ve ortaya çıkan görsel kaynağını döndürür. Bu, dosya boyutunu azaltabilir, ancak yıkıcı bir optimizasyondur: sunum kaydedildikten sonra kaldırılan pikseller daha sonraki bir un‑crop işlemi için mevcut değildir.

import aspose.slides as slides

with slides.Presentation("cropped-image.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = None

    for shape in slide.shapes:
        if isinstance(shape, slides.PictureFrame):
            picture_frame = shape
            break

    if picture_frame is not None:
        cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()
        if cropped_image is not None:
            presentation.save("cropped-data-removed.pptx", slides.export.SaveFormat.PPTX)

Bu yöntem sunuma yeni bir görsel kaynağı ekleyebilir. Orijinal görsel diğer resim çerçeveleri tarafından da kullanılıyorsa, bu çerçevelerin hâlâ mevcut kaynağa ihtiyacı olur; bu nedenle kırpılmış alanların silinmesi mutlaka toplam görsel sayısını azaltmaz. WMF veya EMF içeriğini bu yöntemle kırpmak, kırpılmış sonucu PNG’ye rasterlaştırır.

Raster Görselleri Sıkıştırma

PictureFillFormat.compress_image raster görsel çözünürlüğünü, resmin gösterildiği boyuta göre azaltır. Aynı işlemde kırpılmış bölgeler de kaldırılabilir. Görsel yeniden boyutlandırıldıysa veya kırpıldıysa yöntem True, değişiklik gerekmediyse False döndürür.

Standart bir hedef çözünürlük yeterli olduğunda önceden tanımlı bir PicturesCompression değeri kullanın:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = None

    for shape in slide.shapes:
        if isinstance(shape, slides.PictureFrame):
            picture_frame = shape
            break

    if picture_frame is not None:
        compressed = picture_frame.picture_format.compress_image(True, slides.export.PicturesCompression.DPI150)
        print("The image was compressed." if compressed else "No compression was necessary.")
        presentation.save("compressed-image.pptx", slides.export.SaveFormat.PPTX)

Belirli bir hedef gerektiğinde bir enum değeri yerine özel pozitif DPI değeri de geçilebilir.

Sıkıştırma raster görseller için tasarlanmıştır. SVG ve metafile içeriği bu raster sıkıştırma iş akışıyla azaltılmaz. Ayrıca düşük çözünürlük ve silinen kırpılmış bölgeler, optimize edilmiş sunumdan geri getirilemez. Hedef çözünürlüğü, görselin gerçekten görüntülenecek veya dışa aktarılacak en büyük boyutuna göre seçin; küresel olarak en düşük DPI’yı uygulamaktan kaçının.

Görsel Dönüşüm Efektlerini Yönetme

Parlaklık, kontrast, renk dönüşümleri, bulanıklaştırma, alfa efektleri, sıralı zincirler, inceleme, kaldırma ve iki‑yönlü doğrulama konularını içeren tam iş akışı için Görsel Dönüşüm Efektleri bölümüne bakın.

Resim Çerçevesi Geometrisini Kilitleme

PictureFrameLock ayarları, bir resim çerçevesi için hangi düzenleme işlemlerinin devre dışı bırakıldığını kontrol eder. Örneğin, aspect_ratio_locked özelliği, şekil yeniden boyutlandırılırken en/boy oranının korunmasını sağlar.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("photo.jpg") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 100, image.width, image.height, image)
    picture_frame.picture_frame_lock.aspect_ratio_locked = True

    presentation.save("locked-picture-frame.pptx", slides.export.SaveFormat.PPTX)

Kilitleme, yalnızca resim çerçevesi şekline uygulanır; kaynak görseli aynı en/boy oranına yeniden örneklemek veya kalıcı olarak değiştirmek zorunda bırakmaz.

StretchOffset Değerlerini Ayarlama

Resim doldurma modu “stretch” olduğunda, PictureFillFormat üzerindeki stretch‑offset değerleri, doldurma dikdörtgenini resim çerçevesinin sınırlayıcı kutusuna göre tanımlar. Pozitif yüzde değerleri bir kenardan içeriye doğru bir boşluk oluştururken, negatif yüzde değerleri dışa doğru bir genişleme yaratır.

Bu, kırpmaktan farklıdır. Kırpma değerleri, kaynak görselin hangi kısmının görüneceğini seçerken; stretch offsetleri, görünen resim doldurmasının gerildiği dikdörtgeni değiştirir.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("photo.png") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 10, 10, 400, 300, image)
    picture_frame.picture_format.picture_fill_mode = slides.PictureFillMode.STRETCH
    picture_frame.picture_format.stretch_offset_left = 12
    picture_frame.picture_format.stretch_offset_right = 12
    picture_frame.picture_format.stretch_offset_top = 8
    picture_frame.picture_format.stretch_offset_bottom = 8

    presentation.save("stretch-offsets.pptx", slides.export.SaveFormat.PPTX)

Doldurma yerleşimi için stretch offsetlerini kullanın. Kaynak görsel kenarlarını gizlemek istiyorsanız kırpma özelliklerini kullanın.

Depolama, Dosya Boyutu ve Dışa Aktarım Hususları

Görsel depolama ve resim‑çerçeve biçimlendirmesi ayrı ayrı ele alındığında temel denge noktaları daha kolay yönetilir:

  • Gömülü görseller sunumu kendi içinde tutar ve paylaşım ve sunucu‑tarafı render açısından en güvenilirdir; ancak büyük raster görseller PPTX boyutunu ve bellek kullanımını artırır.
  • Bağlantılı görseller paketi daha küçük tutabilir, fakat sunum dış dosyaların belirtilen yollar veya konumlarda mevcut olmasına bağımlıdır.
  • Kırpma başlangıçta yıkıcı değildir. Gizli pikseller, kırpılmış alanlar açıkça silinene veya sıkıştırma sırasında kaldırılıncaya kadar gömülü kalır.
  • Sıkıştırma büyük raster görsellerin dosya boyutunu önemli ölçüde azaltabilir, ancak kaynak çözünürlüğü feda eder. Görselin slayt üzerindeki hedef boyutu bilindikten sonra uygulanmalıdır.
  • SVG görseller vektör bütünlüğünün önemli olduğu durumlarda SVG olarak kalmalıdır. Vektör kaynağı gerektiğinde gömülü SVG doğrudan çıkarılabilir. Raster slayt dışa aktarımları her zaman slaytı piksellere dönüştürür.
  • Tekrarlanan görseller mümkün olduğunca mevcut bir PPImage kaynağını yeniden kullanmalıdır; aynı dosyanın sunuma tekrar tekrar yüklenmesinden kaçının.

Büyük sunumlar için görsel optimizasyonu genellikle seçici olarak yapıldığında daha etkilidir: logolar ve diyagramları vektör içerik olarak tutun, fotoğrafları gerçek gösterim boyutlarına göre sıkıştırın, kırpılmış pikselleri yalnızca sonradan düzenleme gerekmiyorsa kaldırın ve dış bağlantıları yalnızca bağımlılık yönetimi dağıtım tasarımının bir parçasıysa kullanın.

SSS

Resim çerçevesi ile görsel kaynağı arasındaki fark nedir?

PPImage bir sunuma bağlı görsel kaynağını temsil eder. PictureFrame ise bir slayt üzerindeki bir şekildir; bir görseli gösterir ve boyut, döndürme, kırpma değerleri, efektler ve kilitler gibi çerçeve‑düzeyinde geometri ve biçimlendirme bilgilerini saklar.

Görselleri gömmeli mi yoksa bağlamalı mı?

Sunumun taşınabilir, arşivlenebilir veya dış kaynaklara erişim olmadan render edilmesi gerekiyorsa görselleri gömün. Görselleri yalnızca dış dosya yönetimi kasıtlı ve dış konumlar güvenilir bir şekilde sürdürülebilir ise bağlayın; sadece sıkıştırma yerine bir yedek olarak kullanmayın.

Kırpma PPTX dosya boyutunu azaltır mı?

Kırpma tek başına dosya boyutunu azaltmaz. Normal kırpma ayarları, kaynak görselin bölümlerini gizler ancak altındaki pikselleri tutar. Bu pikselleri kalıcı olarak kaldırmak için PictureFillFormat.delete_picture_cropped_areas veya kırpılmış‑alan kaldırmalı bir görsel sıkıştırma kullanın.

Sıkıştırma sonrası görsel kalitesini geri getirebilir miyim?

Hayır. Sıkıştırma saklanan raster çözünürlüğü azaltabilir ve kırpılmış bölgelerin kaldırılması görsel verisini siler. Daha sonraki yüksek çözünürlüklü düzenleme ihtimali varsa, orijinal kaynak görseli sunum dışında tutun.

SVG görseller nasıl ele alınmalı?

Vektör doğruluğunun önemli olduğu durumlarda SVG içeriğini SVG olarak tutun. Gömülü SvgImage doğrudan çıkarılabilir. Slaytı PNG veya JPEG gibi raster bir formata render etmek, SVG’yi slayt görüntüsünün bir parçası olarak piksellere dönüştürür.

Mevcut slaytları okurken güvenli olmayan tip dönüşümlerinden nasıl kaçınırım?

Şeklin tipini, resim‑çerçevesi‑özel üyeler kullanılmadan önce kontrol edin. isinstance(shape, slides.PictureFrame) kullanmak, geçersiz tip dönüşümlerinden kaçınır ve resim çerçeveleri içermeyen slaytların kod tarafından düzgün şekilde işlenmesini sağlar.