Imagick照片多图像调整裁剪大小而不扭曲/拉伸php



我希望在调整图像大小时保持图像的纵横比。我有94000张图片需要在社交网站上作为预览图片显示。我遇到的挑战是,一些用户上传了全长照片,结果在重新调整尺寸后,它们看起来很拉伸。我正在使用codeigniter来实现这一点。文件名在数据库表中。这是我正在使用的代码

if (file_exists($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles    /purchased_profiles/".$images_->_file_name)) {
    //echo "The file $filename exists";
    $thumb = new Imagick();
    $thumb->readImage($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles/purchased_profiles/".$images_->_file_name); 
    $orientation = $thumb->getImageOrientation(); 
    switch($orientation) { 
        case imagick::ORIENTATION_BOTTOMRIGHT: 
            $thumb->rotateimage("#000", 180); // rotate 180 degrees 
        break; 
        case imagick::ORIENTATION_RIGHTTOP: 
            $thumb->rotateimage("#000", 90); // rotate 90 degrees CW 
        break; 
        case imagick::ORIENTATION_LEFTBOTTOM: 
            $thumb->rotateimage("#000", -90); // rotate 90 degrees CCW 
        break; 
    }
    $thumb->resizeImage(160,160,Imagick::FILTER_LANCZOS,1);
    $thumb->writeImage($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles/purchased_profiles/160x160/".$images_->_file_name);
    $thumb->clear();
    $thumb->destroy(); 
}

如果上传的图像大小不同,这是一个真正的挑战如果我要结合这里找到的解决方案,我如何在php中使用imagick?(调整大小和裁剪)和你的代码我可能会想出以下

      if (file_exists($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles/purchased_profiles/".$images_->_file_name)) {

        $thumb = new Imagick();
       $thumb->readImage($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles/purchased_profiles/".$images_->_file_name); 
$orientation = $thumb->getImageOrientation(); 
switch($orientation) { 
    case imagick::ORIENTATION_BOTTOMRIGHT: 
        $thumb->rotateimage("#000", 180); // rotate 180 degrees 
    break; 
    case imagick::ORIENTATION_RIGHTTOP: 
        $thumb->rotateimage("#000", 90); // rotate 90 degrees CW 
    break; 
    case imagick::ORIENTATION_LEFTBOTTOM: 
        $thumb->rotateimage("#000", -90); // rotate 90 degrees CCW 
    break; 
}
          //now check the width
        $width=$thumb->getImageWidth();
        //now check height
        $height=$thumb->getImageHeight();
       if ($height>$width) {
         $new_height=160;
         $new_width=(int)($width/$height*160);
         $thumb->resizeImage($new_width,$new_height,Imagick::FILTER_LANCZOS,1);
         $cropWidth = $thumb->getImageWidth();
         $cropHeight = $thumb->getImageHeight();
      $cropZoom=1;
     if ($cropZoom) {
       $newWidth = $cropWidth / 2;
       $newHeight = $cropHeight / 2;
    $thumb->cropimage(
        $new_width,
        $new_width,
        0,
        0
    );

      }
   } 
     elseif ($width>$height) {
     # code...
        $new_width=160;
        $new_height=(int)($height/$width*160);
       $thumb->resizeImage($new_width,$new_height,Imagick::FILTER_LANCZOS,1);
         }
       else{
        $thumb->resizeImage(160,160,Imagick::FILTER_LANCZOS,1);
        }   

           $thumb->writeImage($_SERVER["DOCUMENT_ROOT"]."/uploads/profiles/purchased_profiles/160x160/".$images_->_file_name);
        $thumb->clear();
       $thumb->destroy(); }

如果图像高度大于宽度,你可能需要裁剪,所以我决定裁剪的尺寸等于从左角到左角的宽度,这样你很可能不会错过这个人的脸。祝好运

最新更新