Php ile üzerlerine nesil imagemagick - kullanarak kırpma

2 Cevap php

Ben PHP için imagemagic'den yap-işlevleri yeterli olduğunu hissetmedim çünkü uzun zaman önce system(...) ile ImageMagick kullanarak görüntüleri yeniden boyutlandırma için küçük bir kütüphane oluşturdu.

Ancak, son zamanlarda ben bir symfony projeye portuna bu vardı ve (eğer doğru hatırlıyorum) Ben sfThumbnailPlugin kullanmayı seçti. Örneğin, istenen boyutu belirlemek için - yani bu ne yazık ki ürün işlevselliği içermiyordu 300x300 px ve üzerlerine var o sığacak şekilde kırpılır. Kendimi bu işlevselliğini uygulamak için seçtik, ama yanlış bir şey gibi görünüyor.

Genişliği yüksekliğinden fazladır whe ben orada istenen boyutta bir görüntüyü yeniden boyutlandırmak zaman, oranlar vidalı olsun. Bu örneğe bir göz atın: http://i37.tinypic.com/9hkqrl.png - Bu örnekte üst sıra doğru oranlarda ve alt satır sorundur.

Bu örnekte, üst ve alt kesilmiş olmalıdır.

İşte kırpma (değişken adları kendi kendini açıklayıcı olabilir) yapılır bölümü için kodu:

<?php
    if ($width/$height > $this->maxWidth/$this->maxHeight) {
      // then resize to the new height...
				$command .= ' -resize "x'.$this->maxWidth.'"';

				// ... and get the middle part of the new image
				// what is the resized width?
				$resized_w = ($this->maxWidth/$height) * $width;

				// crop
				$command .= ' -crop "'.$this->maxHeight.'x'.$this->maxWidth.'+'.round(($resized_w - $this->maxWidth)/2).'+0"';
			} else {
				// or else resize to the new width
				$command .= ' -resize "'.$this->maxHeight.'x"';

				// ... and get the middle part of the new image
				// what is the resized height?
				$resized_h = ($this->maxHeight/$width) * $height;

				// crop
				$command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.
				             '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage';
			}

Yanlış kod üretir eğer ifadenin ikinci parçasıdır.

Herkes benim için bu düzeltebilirsiniz? Açıkçası hesaplamalar yanlış.

2 Cevap

Çözelti, aşağıdaki edilmiştir:

    if ($width/$height > $this->maxWidth/$this->maxHeight) {
      // then resize to the new height...
				$command .= ' -resize "x'.$this->maxHeight.'"';

				// ... and get the middle part of the new image
				// what is the resized width?
				$resized_w = ($this->maxHeight/$height) * $width;

				// crop
				$command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.'+'.round(($resized_w - $this->maxWidth)/2).'+0" +repage';
			} else {
			  $command .= ' -resize "' . $this->maxWidth . 'x"';
			  $resized_h = ($this->maxWidth/$width) * $height;

				// crop
				$command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.
				             '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage';
			}

Ben bunu deneyebilirsiniz bir öneri söyleyin,

Ben koşullarının doğru bir şekilde kontrol edilmez düşünüyorum Görüntü bağlantısını gördüm.

Eğer koşul [(width/height) > (maxWidth/maxHeight)] yerine check kontrol ettirin

if(width == height) { } elseif(width > height) { } else(width < height){ }

Bu durumu kontrol edip durumuna göre görüntü kırpma ve yeniden boyutlandırma.

Teşekkür ederim