Boşluk ya da boş alanlarda önlemek için kırpma görüntüleri için iyi bir algoritma veya kitaplık nedir?

7 Cevap php

Ben küçük bir önizleme boyutuna kırpmak istiyorum resimlerin görüntülerin bir sürü var.

Sorun (yani boşluklarla alanları önlemek) resimde bir "ilginç" bir kısmını göstermek için onları kırpmak istiyor.

Görüntüler genellikle arka için düz bir renk ya da ince bir eğime sahip. Bunlar çoğunlukla oldukça farklı şekiller ile vektör tarzı sanat vardır.

İşte bazı örnekler: link ;-)

Ben özellikleri fazla olan bölgeyi bulmak için kayar pencere ile görüntü özelliği algılama algoritması çeşit kullanarak düşünüyordum.

PHP bu uygulama, ama ben bir kütüphane ya da mevcut uzantısı yoksa kendim uygulamaya umursamıyorum.

Fikirler?

7 Cevap

ImageMagick a trim çalışma vardır. Bu bir kütüphane olarak kullanılabilir ama ben PHP kullanmak için ne kadar zor olduğunu bilmiyorum. Orada bazı PHP interfaces.

Burada bir fairly simple approach bir kenar algılama filtresi kullanılarak, ve sonra bir simge oluşturmak için görüntünün merkez-of-edginess etrafında kırpma. Bu en görüntülerde oldukça iyi çalışır, ancak birden fazla konu var eğer. Bir kaynak görüntüde "ilginç" noktaları belirleyerek başka yollar önerilere açığım.

Peki, sadece bir kenar algılama algoritması kullanarak düşünebilirsiniz. Kenarlarının büyük sayı ile bölgeyi seçin. (Onlar kökenli olabileceği gibi) bulanık olmayan kenarları yüksek ağırlık verir.

ImageMagick for PHP nesil otomatik den thumbnails. Bu SO question bir ImageMagick otomatik kırpma operatöre bir bağlantı vardır, ve ben emin değilim, ama this buna PHP arayüzü olduğunu düşünüyorum.

Dan the link:

bool Imagick::trimImage ( float $fuzz )
Remove edges that are the background color from the image.

Daha genel "interestingness" için, belki seam carving (en yüksek enerji yerine, düşük enerji alanları bulmak için) bir tersini deneyin.

Tamam, burada örneklere bakarak sonra, ben ne yapardım bulunuyor:

Her görüntünün tüm satırları ve tüm sütunları toplamı. Siz de bu gibi bakarak, iki dizi alırsınız:

      /-----\  /--\
    _/       --    |
___-                \_________

Birkaç görüntüler için bu diziler bakarak, uygun bir eşik (sadece sıfırın üstünde muhtemelen bir şey) bulabilirsiniz. Kırpmak zorunda olduğu daha sonra soldaki ve bu eşiğin sağdaki geçişidir. Sormak - Ben bunu yeterince açık değilse yapmak başardınız umuyoruz!

Kullanan bir CLI programı http://pecl.php.net/package/imagick:

<?php
   dl('imagick.so');

   $img = new Imagick();
   $img->readImage($argv[1]);

   # (* 0.0: exact match; * 1.0: crop entire image)
   $fuzz = current($img->getQuantumRange()) * 0.25; 

   $img->trimImage($fuzz);

   $img->writeImage($argv[2]);
?>

Bu sürece görüntü sınırına etrafında bir çerçeve yok gibi, yeterince iyi çalışması gerekir.

Drupal en yüksek entropi ve görüntülerde "ilginç" alanları bulmak için PHP kodu vardır smartcrop adlı bir proje vardır. output examples bakın.

Siz de yok-Drupal projelerde modülü ve kütüphanedeki işlevleri kullanmak gerekir.