【问题标题】:Imagick photo multiple image resize crop without distorting /stretching phpImagick 照片多图像调整大小裁剪而不扭曲/拉伸 php
【发布时间】:2016-09-11 11:10:18
【问题描述】:

我希望在调整图像大小时保持图像的纵横比。我有 94​​ 000 张图像需要在社交网站上显示为预览图像。我遇到的挑战是一些用户上传了全长照片,结果它们在重新调整大小后显得拉伸。我正在使用 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(); 
}

【问题讨论】:

    标签: imagick codeigniter-3 aspect-ratio


    【解决方案1】:

    如果上传不同尺寸的图片,这是一个真正的挑战如果我要将此处找到的解决方案 how do i use imagick in php? (resize & crop) 和您的代码结合起来,我可能会想出以下内容

          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(); }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2014-03-22
      • 2018-09-25
      • 2015-10-27
      • 2012-10-16
      • 1970-01-01
      相关资源
      最近更新 更多