GD kütüphanesi ile mükemmel bir kare bir görüntü kırpma Sorunu

0 Cevap php

Ben otomatik olarak bazı opsiyonlara dayalı bir kare olarak bir görüntüyü kırpar bir sınıf kullanabilirsiniz. Sorun görüntü belirli genişlik ve yükseklik olduğunda, görüntü kırpılmış ancak siyah bir piksel 1px sütun görüntünün sağında eklenir olmasıdır. Ben sorunun yeni görüntü boyutunu oluşturmak için kullanılan matematik olduğunu düşünüyorum ... Belki zaman yükseklik ve genişlik bölümü daha sonra kare mükemmel değil ve siyah pikseller eklenir bir ondalık sayı verir ...

Herhangi bir çözüm?

Bu benim nesne aramak nasıl:

$resizeObj = new resize($image_file); // *** 1) Initialise / load image
            $resizeObj -> resizeImage(182, 182, 'crop'); // *** 2) Resize image
            $resizeObj -> saveImage($destination_path, 92); // *** 3) Save image

Ben bahsediyorum sınıfının kısmı:

private function getOptimalCrop($newWidth, $newHeight)
    {

        $heightRatio = $this->height / $newHeight;
        $widthRatio  = $this->width /  $newWidth;

        if ($heightRatio < $widthRatio) {
            $optimalRatio = $heightRatio;
        } else {
            $optimalRatio = $widthRatio;
        }

        $optimalHeight = $this->height / $optimalRatio;
        $optimalWidth  = $this->width  / $optimalRatio;

        return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
    }

    private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
    {
        // *** Find center - this will be used for the crop
        $cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
        $cropStartY = 0; // start crop from top

        $crop = $this->imageResized;
        //imagedestroy($this->imageResized);

        // *** Now crop from center to exact requested size
        $this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
        imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
    }

Update:

Belki bu değişiyor:

$heightRatio = $this->height / $newHeight;
$widthRatio  = $this->width /  $newWidth;

Bu ile:

$heightRatio = round($this->height / $newHeight);
$widthRatio  = round($this->width /  $newWidth);

0 Cevap