2011-07-31 5 views
10

Resimden merkeze 200 * 130 ebadında bir görüntü kırpmak istiyorum kırpılacak resmin boyutu değişebilir, eğer resim küçülüyorsa kırpmazsınız bu bölüme nerede i yüksekliğini ve görüntünün kontrolünü yapabilir ancak resmin ortasından kırpılan şeylere çarpar. Merkezin ekin noktası olarak nasıl saklanacağını ve dışarıdan daha fazla kırpmasını sağlayamadımKırpma Resmi Merkezden PHP

cevap

31

GD, 4.3.6 sürümünden itibaren tüm PHP yüklemeleriyle birlikte gelir, böylece şansınız olur.

İşte

  1. GD imagecreatefrom*() işlevlerden birini kullanarak bir görüntü kaynağı oluşturun ... Eğer yapılması gereken adımlar var. Kullandığınız kimse kırpma imagecopy()

mahsul koordinatlarını bulun kullanarak aşağıdaki algoritmayı ve kırpma kullanarak koordinatları belirlemek imagesx() ve

  • imagesy() kullanarak görüntü boyutlarını belirleyin sen
  • uğraşıyoruz görüntünün türüne bağlıdır https://gist.github.com/880506

    -

    $width = imagesx($img); 
    $height = imagesy($img); 
    $centreX = round($width/2); 
    $centreY = round($height/2); 
    
    $cropWidth = 200; 
    $cropHeight = 130; 
    $cropWidthHalf = round($cropWidth/2); // could hard-code this but I'm keeping it flexible 
    $cropHeightHalf = round($cropHeight/2); 
    
    $x1 = max(0, $centreX - $cropWidthHalf); 
    $y1 = max(0, $centreY - $cropHeightHalf); 
    
    $x2 = min($width, $centreX + $cropWidthHalf); 
    $y2 = min($height, $centreY + $cropHeightHalf); 
    

    benim resim işleme sınıfını kullanmak için çekinmeyin, çok daha kolay bazı yönlerini yapmalıdır

    $im = new ImageManipulator('/path/to/image'); 
    $centreX = round($im->getWidth()/2); 
    $centreY = round($im->getHeight()/2); 
    
    $x1 = $centreX - 100; 
    $y1 = $centreY - 65; 
    
    $x2 = $centreX + 100; 
    $y2 = $centreY + 65; 
    
    $im->crop($x1, $y1, $x2, $y2); // takes care of out of boundary conditions automatically 
    $im->save('/path/to/cropped/image'); 
    
  • +1

    Şapkalar kapalı, bu harika ve mükemmel çalışıyor.THanks – June

    +0

    İlk algoritmada, hangi değişkenler imagecopy() parametrelerine uygun olacaktı? –

    +0

    @ChrisHarrison Bkz. Https://gist.github.com/philBrown/880506#file-imagemanipulator-php-L185 – Phil

    0

    Bu size yardımcı olabilir .

    function cropCentered($img, $w, $h) 
    { 
        $cx = $img->getWidth()/2; 
        $cy = $img->getHeight()/2; 
        $x = $cx - $w/2; 
        $y = $cy - $h/2; 
        if ($x < 0) $x = 0; 
        if ($y < 0) $y = 0; 
        return $img->crop($x, $y, $w, $h); 
    } 
    

    GD kütüphanesini kullandığınızı farz ediyorum. $ img GD imajıdır, $ w ve $ h sırasıyla genişlik ve yüksekliktir, yeni görüntünüzün olmasını istersiniz. Sizin durumunuzda, $ w = 200, $ h = 130.

    +0

    Hayır ben GD kütüphanesi benimle kullanılabilir – June

    +1

    @June GD çoğu php yüklemesinde bulunur, phpinfo() 'yi kullanır ve büyük olasılıkla onu görürsünüz –

    +0

    NO GD Kütüphanesi ile yukarıdakileri oluşturmama ve kaydetme konusunda bana yardımcı olabilir misiniz? görüntü? – June

    1

    Jeez, neden bunu zor yoldan yapıyorsunuz? Sadece basit kullandığım nasıl/2

    $imageSize = getimagesize('thumbnail.png'); 
    
    $croppedImage = imagecrop(imagecreatefrompng('thumbnail.png'), ['x' => 0, 'y' => ($imageSize[1]-$imageSize[0]*(9/16))/2, 'width' => $imageSize[0], 'height' => $imageSize[0]*(9/16)]); 
    

    haber kırpmak için miktar olarak x ve y pozisyonlarını ayarlamak benim $ imagesize [0] * (9/16) i y tarafından kırpma am tutar olan yön ve ben kırpma görüntüyü bulmak için orijinal görüntü yüksekliğinden çıkardım, sonra 2'ye bölünür. Genişlik için aynı şeyi yapmak istiyorsanız, aynı adımları takip edin.