0

現在、アスペクト比を維持しながら画像のサイズをカスタムに変更しています:

class ImgResizer {
var $originalFile = '$newName';
function ImgResizer($originalFile = '$newName') {
    $this -> originalFile = $originalFile;
}
function resize($newWidth, $targetFile) {
    if (empty($newWidth) || empty($targetFile)) {
        return false;
    }
    $src = imagecreatefromjpeg($this -> originalFile);
    list($width, $height) = getimagesize($this -> originalFile);
    $newHeight = ($height / $width) * $newWidth;
    $tmp = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    if (file_exists($targetFile)) {
        unlink($targetFile);
    }
    imagejpeg($tmp, $targetFile, 95);
}
}

使用法:

$work = new ImgResizer($path);
$work -> resize(200, $path);

しかし、画像の 200x200px バージョンを取得したいと思います。そして、垂直方向と水平方向の中央に配置する必要があります(基本的に、画像のメインの200pxを取得します)

それは可能ですか?

-編集-

function resize($newWidth, $targetFile) {
    if (empty($newWidth) || empty($targetFile)) {
        return false;
    }
    $src = imagecreatefromjpeg($this -> originalFile);
    list($width, $height) = getimagesize($this -> originalFile);

    $newHeight =  $newWidth;


      if ($width > $newWidth){
       $srcx = $width/2 - $newWidth/2;
       $destx = 0;
   }
   else{
       $srcx = 0;
       $destx = $newWidth/2 - $width/2;
   }
   if ($height > $newHeight){
       $srcy = $height/2 - $newHeight/2;
       $desty = 0;
   }
   else{
       $srcy = 0;
       $desty = $newHeight/2 - $height/2;
   }


     $tmp = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($tmp, $src, $destx, $desty, $srcx, $srcy, $newWidth, $newHeight, $width, $height);


    if (file_exists($targetFile)) {
        unlink($targetFile);
    }
    imagejpeg($tmp, $targetFile, 95);
}

予期しないものを作成します:HTTP://209.51.221.243/integracion/files/uploads/1_050.JPG

4

1 に答える 1

1

試す

if ($width > $newWidth){
    $srcx = $width/2 - $newWidth/2;
    $destx = 0;
    $w = $newWidth;
}
else{
    $srcx = 0;
    $destx = $newWidth/2 - $width/2;
    $w = $width;
}
if ($height > $newHeight){
    $srcy = $height/2 - $newHeight/2;
    $desty = 0;
    $h = $newHeight;
}
else{
    $srcy = 0;
    $desty = $newHeight/2 - $height/2;
    $h = $keight;
}
imagecopyresampled($tmp, $src, $destx, $desty, $srcx, $srcy, $w, $h, $w, $h);
于 2012-10-05T21:22:13.127 に答える