Nasıl programlı olmayan bir dikdörtgen şeklinde bir görüntüyü kırpmak istiyorsunuz?

3 Cevap php

Ben olmayan bir dikdörtgen şeklinde bir dikdörtgen görüntüyü kırpmak istiyorum. Ben tamamen anlamıyla alırsak, bu mümkün değil biliyoruz. Ne ile bitirmek istiyorum şeffaf bir arka planda, Y şekil kırpılmış, görüntü X.

Diyelim ki Idaho bayrağının resmini çekmek ve Idaho eyaletinin şekle kırpmak istiyorum örneğin diyelim. Ben böyle bir şey yapacağını hayal:

  1. Idaho şekli için opak pikseller, saydam pikselleri başka bir yerde olan bir görüntü oluşturmak
  2. Okuyun ve bu Idaho eyalet görüntü için bitmap çeşit mağaza
  3. Idaho devlet görüntüdeki her opak bir piksel konumu için, Idaho devlet bayrağı görüntüsünden gelen pikseli kopyalayın ve boş, şeffaf tuval üzerine yerleştirin

Adım 1 Açıkçası elle yapılabilir, ancak geri kalan programlama yapılabilir olacaktır. Ben genel olarak doğru bir fikir olduğunu düşünüyorum ama ben özelliklerini yaklaşım olurdu bilmiyorum. Herkes bana doğru yönde işaret edebilir?

Bildiğim kadarıyla uygulama teknolojisi gider gibi, ben bir PHP adam değilim, bu yüzden gdLibrary veya PHP ile çalışan bir şey ile muhtemelen bana gitmek için en iyi yolu olacaktır.

3 Cevap

Ben sadece bir bit maskesi ya da alfa kanalını ekleyerek yapmak çok daha kolay olacağını düşünürdüm. Bu durumda size şekil olumsuz bir maske resim kullanmak istiyorum ve o zaman sadece bir maske olarak o normal görüntüye uygulamak ve daha sonra şeffaf bir biçimde dışarı kaydedin. Ive aslında GD veya Imagemagick ile bu hiç yapmadım ama Jerry olarak kullanılabilir anlaşılacağı düşünürdüm.

Acutally burada bir blog yazısı yardımcı olabilir benzer SO soru formu,: http://about.phalacee.com/geek/creating-mask-layers-using-php-gd

Böyle bir şey yapmak için her zamanki gibi yerine şeffaf ve opak sizin anahat için beyaz (tümü 1) ve siyah (tüm 0'larin) kullanmak olacaktır. Sonra VE kırpmak için çalışıyoruz görüntü ile o görüntü. Sonuç 0 en anahat görüntü 0'lar vardı nerede ve anahat 1 adlı vardı diğer görüntü.

Ayrıca anahat görüntüyü ters gerekir, ve AND arka plan görüntüsü ile ters versiyonu olabilir. Sonra VEYA ön plan görüntüsü ile arka plan görüntüsü Idaho şekli (sizin örnek kullanmak için) ve her yerde arka plan görüntüsü de ön planda görüntünün bir kompozit üretmek.

Eğer kullandığınız kütüphane özelliklerine bağlı olarak, yeteneği tür olsa da doğrudan kullanılabilir olduğunu iyi bir şans var. Sadece örneğin, Windows MaskBlt fonksiyonu bu yeteneğe sahiptir.

Php ImageMagick kullanarak muhtemelen en iyi bahis:

$source = IMagick("sourcefile");
$mask = IMagick("maskfile");
$mask->adaptiveResizeImage($source->getImageWidth(), $source->getImageHeight(), true);
$source->compositeImage($mask, imagick::COMPOSITE_MULTIPLY, 0, 0);
$source->writeImage("newfile");
$source->clear();
$source->destroy();

istediğiniz gibi sourcefile maskfile istediğiniz şekli için doğru ayarlanmış alfa kanalı içeren bir maske dosyası olmalıdır, kaynak görüntü olmalıdır.