検索
ホームページphp教程PHP源码PHP实现图片裁剪与缩放的几种方法

图片指定大小然后由php相关函数来实现图片裁剪功能,前段的js效果在这里就不介绍了,大家可以到网上找有很多这类代码,我只整理了php操作部份。

<script>ec(2);</script>

方法一

 代码如下 复制代码

图片裁剪缩放函数,支持方位裁剪和自定义坐标裁剪
    /**
     * 图片裁剪函数,支持指定定点裁剪和方位裁剪两种裁剪模式
     * @param   $src_file       原图片路径
     * @param      $new_width      裁剪后图片宽度(当宽度超过原图片宽度时,去原图片宽度)
     * @param      $new_height     裁剪后图片高度(当宽度超过原图片宽度时,去原图片高度)
     * @param      $type           裁剪方式,1-方位模式裁剪;0-定点模式裁剪。
     * @param      $pos            方位模式裁剪时的起始方位(当选定点模式裁剪时,此参数不起作用)
     *                                      1为顶端居左,2为顶端居中,3为顶端居右;
     *                                      4为中部居左,5为中部居中,6为中部居右;
     *                                      7为底端居左,8为底端居中,9为底端居右;
     * @param      $start_x        起始位置X (当选定方位模式裁剪时,此参数不起作用)
     * @param      $start_y        起始位置Y(当选定方位模式裁剪时,此参数不起作用)
     * @return                  裁剪图片存储路径
     */
    function thumb($src_file, $new_width, $new_height, $type = 1, $pos = 5, $start_x = 0, $start_y = 0) {
        $pathinfo = pathinfo($src_file);
        $dst_file = $pathinfo['dirname'] . '/' . $pathinfo['filename'] .'_'. $new_width . 'x' . $new_height . '.' . $pathinfo['extension'];
        if (!file_exists($dst_file)) {
            if ($new_width                 echo "params width or height error !";
                exit();
            }
            if (!file_exists($src_file)) {
                echo $src_file . " is not exists !";
                exit();
            }
            // 图像类型
            $img_type = exif_imagetype($src_file);
            $support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
            if (!in_array($img_type, $support_type, true)) {
                echo "只支持jpg、png、gif格式图片裁剪";
                exit();
            }
            /* 载入图像 */
            switch ($img_type) {
                case IMAGETYPE_JPEG :
                    $src_img = imagecreatefromjpeg($src_file);
                    break;
                case IMAGETYPE_PNG :
                    $src_img = imagecreatefrompng($src_file);
                    break;
                case IMAGETYPE_GIF :
                    $src_img = imagecreatefromgif($src_file);
                    break;
                default:
                echo "载入图像错误!";
                exit();
            }
            /* 获取源图片的宽度和高度 */
            $src_width = imagesx($src_img);
            $src_height = imagesy($src_img);
            /* 计算剪切图片的宽度和高度 */
            $mid_width = ($src_width             $mid_height = ($src_height             /* 初始化源图片剪切裁剪的起始位置坐标 */
            switch ($pos * $type) {
                case 1://1为顶端居左
                    $start_x = 0;
                    $start_y = 0;
                    break;
                case 2://2为顶端居中
                    $start_x = ($src_width - $mid_width) / 2;
                    $start_y = 0;
                    break;
                case 3://3为顶端居右
                    $start_x = $src_width - $mid_width;
                    $start_y = 0;
                    break;
                case 4://4为中部居左
                    $start_x = 0;
                    $start_y = ($src_height - $mid_height) / 2;
                    break;
                case 5://5为中部居中
                    $start_x = ($src_width - $mid_width) / 2;
                    $start_y = ($src_height - $mid_height) / 2;
                    break;
                case 6://6为中部居右
                    $start_x = $src_width - $mid_width;
                    $start_y = ($src_height - $mid_height) / 2;
                    break;
                case 7://7为底端居左
                    $start_x = 0;
                    $start_y = $src_height - $mid_height;
                    break;
                case 8://8为底端居中
                    $start_x = ($src_width - $mid_width) / 2;
                    $start_y = $src_height - $mid_height;
                    break;
                case 9://9为底端居右
                    $start_x = $src_width - $mid_width;
                    $start_y = $src_height - $mid_height;
                    break;
                default://随机
                    break;
            }
            // 为剪切图像创建背景画板
            $mid_img = imagecreatetruecolor($mid_width, $mid_height);
            //拷贝剪切的图像数据到画板,生成剪切图像
            imagecopy($mid_img, $src_img, 0, 0, $start_x, $start_y, $mid_width, $mid_height);
            // 为裁剪图像创建背景画板
            $new_img = imagecreatetruecolor($new_width, $new_height);
            //拷贝剪切图像到背景画板,并按比例裁剪
            imagecopyresampled($new_img, $mid_img, 0, 0, 0, 0, $new_width, $new_height, $mid_width, $mid_height);
            /* 按格式保存为图片 */
            switch ($img_type) {
                case IMAGETYPE_JPEG :
                    imagejpeg($new_img, $dst_file, 100);
                    break;
                case IMAGETYPE_PNG :
                    imagepng($new_img, $dst_file, 9);
                    break;
                case IMAGETYPE_GIF :
                    imagegif($new_img, $dst_file, 100);
                    break;
                default:
                    break;
            }
        }
        return ltrim($dst_file, '.');
    }

附件是一个有样例图片的测试demo。
不过,这个函数不支持动态gif图片的裁剪缩放。

方法二,

 代码如下 复制代码

list($src_w,$src_h)=getimagesize($src_img);  // 获取原图尺寸
$dst_scale = $dst_h/$dst_w; //目标图像长宽比
$src_scale = $src_h/$src_w; // 原图长宽比

if($src_scale>=$dst_scale)

 // 过高
 $w = intval($src_w);
 $h = intval($dst_scale*$w);
 $x = 0;
 $y = ($src_h - $h)/3;
}
else
{
// 过宽
 $h = intval($src_h);
 $w = intval($h/$dst_scale);
 $x = ($src_w - $w)/2;
 $y = 0;
}
// 剪裁
$source=imagecreatefromjpeg($src_img);
$croped=imagecreatetruecolor($w, $h);
imagecopy($croped,$source,0,0,$x,$y,$src_w,$src_h);
// 缩放
$scale = $dst_w/$w;
$target = imagecreatetruecolor($dst_w, $dst_h);
$final_w = intval($w*$scale);
$final_h = intval($h*$scale);
imagecopysampled($target,$croped,0,0,0,0,$final_w,$final_h,$w,$h);
// 保存
$timestamp = time();
imagejpeg($target, "$timestamp.jpg");
imagedestroy($target);
?>

方法三


根据自定义的目标图, 按目标图高宽比裁剪、缩放源图.

传入参数:

 代码如下 复制代码

$source_path string 源图路径

$target_width integer 目标图宽度

$target_height integer 目标图高度

支持图片类型: image/gif, image/jpeg, image/png.

function imagecropper($source_path, $target_width, $target_height)
{
 $source_info   = getimagesize($source_path);
 $source_width  = $source_info[0];
 $source_height = $source_info[1];
 $source_mime   = $source_info['mime'];
 $source_ratio  = $source_height / $source_width;
 $target_ratio  = $target_height / $target_width;

 // 源图过高
 if ($source_ratio > $target_ratio)
 {
  $cropped_width  = $source_width;
  $cropped_height = $source_width * $target_ratio;
  $source_x = 0;
  $source_y = ($source_height - $cropped_height) / 2;
 }
 // 源图过宽
 elseif ($source_ratio  {
  $cropped_width  = $source_height / $target_ratio;
  $cropped_height = $source_height;
  $source_x = ($source_width - $cropped_width) / 2;
  $source_y = 0;
 }
 // 源图适中
 else
 {
  $cropped_width  = $source_width;
  $cropped_height = $source_height;
  $source_x = 0;
  $source_y = 0;
 }

 switch ($source_mime)
 {
  case 'image/gif':
   $source_image = imagecreatefromgif($source_path);
   break;

  case 'image/jpeg':
   $source_image = imagecreatefromjpeg($source_path);
   break;

  case 'image/png':
   $source_image = imagecreatefrompng($source_path);
   break;

  default:
   return false;
   break;
 }

 $target_image  = imagecreatetruecolor($target_width, $target_height);
 $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

 // 裁剪
 imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
 // 缩放
 imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);

 header('Content-Type: image/jpeg');
 imagejpeg($target_image);
 imagedestroy($source_image);
 imagedestroy($target_image);
 imagedestroy($cropped_image);
}

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境