2016-05-15 47 views
1

我希望在调整它们的大小时保持图像的宽高比。我需要在社交网站上显示94000个图像作为预览图像。我得到的挑战是一些用户上传了全长照片,结果它们在重新调整大小后显得很紧张。我正在使用代码点火器来实现这一点。文件名在数据库表中。这是我使用Imagick照片多图像调整大小作物没有扭曲/拉伸php

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

回答

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

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

+0

谢谢你工作像魔术甚至没有编辑你的代码 –