Tricky matematik problemi görüntüleri yeniden boyutlandırma

3 Cevap php

I have an image that I want to be watermarked to the bottom right section of other images. The dimensions of the watermark image are 179 width, 39 height.

Şimdi ne kimin boyutları 150 genişlik, 20 yükseklik olan başka bir görüntü varsa? Biz orijinal görüntüsünü kullanarak filigran çalıştı, bu tabii ki doğru, çok büyük ve görüntü kendisi filigran görüntü tamamen maskeli olurdu olurdu?

Peki nasıl bir filigran olarak hala görünür ve alışkanlık tamamen görüntüyü maske böylece ben filigran görüntüsü, 150 genişliğinden daha az bir şey, 20 yüksekliği, yeniden boyutlandırmak için daha küçük bir genişlik ve yüksekliğini belirleyebilir?

3 Cevap

Bu iki maksimum değerlerin daha küçük filigran görüntü ölçek o zaman, filigran izin verebilirsiniz küçük resmin yüksekliği ve genişliği maksimum yüzdesini almak gerekir. Sonuçlarınız hedef görüntü o geniş, ya da tam tersi daha uzun boylu olmasına göre değişir.

Eğer filigran yüksekliğinin en fazla 25% ve hedef görüntünün genişliğinin en fazla 50% olmasını istiyorsanız Örneğin, size boyut ya onu ölçekli eğer filigran nasıl olması gerektiğini büyük görebilirsiniz.

Genişliğinin% 50 Ölçekleme filigran (Ben keyfi seçilen yüzdelere göre) çok uzun boylu 75 x 16 piksel, demek olur.

(75/179) * 39 = 16

Yüksekliğinin% 25 ölçekleme 22 x 5 filigran anlamına gelir.

(5/39) x 150 = 19

Boyutları orijinal filigran daha büyük olma sonunda ise, filigran up ölçekli olup olmadığını size kalmış. Aynı faktör tarafından boyutunu azalan göre, bir görüntünün boyutunu artırarak zaman görüntü kalitesi çok daha hızlı düşürür.

İlk olarak dışarı, ben bunun yerine 'sinek' boyutlandırma generate a set of watermark images of different sizes öneririz.

Ben dinamik olarak bir web sitesinde görüntüleri filigran için nasıl bir iş akışı ana hatlarıyla aşağıda:

Design a good watermark

Her şeyden önce, şeffaf bir arka plan ile filigranı tasarımı deneyin. Bu büyük hedef görüntünün önemli bölümlerini örtbas riskini azaltacaktır. Bu, gif veya (tercihen) png imagefile biçimini kullanarak yapılabilir. Sadece şeffaf filigran aydınlık ve karanlık arka iyi iki çalıştığından emin olun.

Ayrıca iyi hem portre ve garip boy oranları ile peyzaj tarzı görüntülerde ve çalışır filigran tasarımı nasıl dikkate alır. Geniş görüntüler için tek ve uzun boylu görüntüler için bir - iki versiyonlarını yapmak düşünmelisiniz. İkincisi türü için, filigran 90 derece döndürmek olabilir ya, filigran metin içeriyorsa, iki veya daha fazla hat metni bölmek isteyebilirsiniz.

Pre-render the watermark in several different sizes

Yani, dinamik yerine ben farklı boyutları ile filigran görüntülerin bir dizi işlemek için tavsiye filigranı yeniden boyutlandırmak yok. Bu sadece bir kez yapılmalıdır ve büyük ölçüde (özellikle küçük hedef görüntüleri için) filigran netlik ve / veya okunabilirliği artıracaktır.

Görüntüleri web sayfasında nasıl olacak farklı olarak, boyutları daha büyük ya da daha küçük bir sayı gerekebilir. Bu yapmak zorunda olacak bir tasarım seçimi olduğunu, ama sadece iki ya da üç farklı boyutta paçayı düşünüyorum.

Apply the watermark

Bu, (php-dosyasında), sunucu tarafında dinamik olur. İlk fonksiyon getimagesize kullanarak hedef görüntünün boyutlarını öğrenmek. Elinde bu bilgiler ile, boyutu, en boy oranı ve tercihe dayalı kullanmak için filigran hangi sürümünü karar vermek gerekir. Örneğin

if ( $width > $height ) {$useLandscapeWatermark=true;}
if ( $width > 100 && $width < 400 ) {$watermarkSize=2;}

vb

Son olarak, size gd library bakmak tavsiye filigran uygulamak. Bu iki resim birleştirme, diğerleri arasında birçok temiz Analiz yapılırken yapabileceğiniz güçlü bir kütüphanedir. Alternatif bir ImageMagic olduğunu.

İyi şanslar!

Herhalde küçük hangisi 20 görüntü filigran olma veya% 179x39, için filigran ölçekli olacaktır.