How to use proportional scaling of images in PHP example code

怪我咯
Release: 2023-03-13 11:18:02
Original
1388 people have browsed it

Mainly introduces how to use PHP to scale pictures. You can specify the width and length of scaling required for the original image.

This article introduces the method of image compression in PHP. Readers You can refer to or improve it according to the specific application, and directly upload the code. The function of imgzip($src,$newwid,$newhei) brings in the original image, the width required for scaling, and the length of scaling.

<?php 
//压缩图片 缩略图
$src= "xiezheng.jpg";
$newwid=640;
$newhei= 480;
function imgzip($src,$newwid,$newhei){
 $imgInfo = getimagesize($src);

 $imgType = image_type_to_extension($imgInfo[2], false);

 $fun = "imagecreatefrom{$imgType}";
//声明图片 打开图片 在内存中
 $image = $fun($src);
//方便配置长度宽度、高度,设置框为变量wid,高度为hei
 $wid=$imgInfo[0];
 $hei=$imgInfo[1];
//判断长度和宽度,以方便等比缩放,规格按照500, 320
 if($wid>$hei){
 $wid=$newwid;
 $hei=$newwid/($wid/$hei);
 }else {
 $wid = $newhei * ($wid / $hei);
 $hei = $newhei;
 }
//在内存中建立一张图片
 $images2 = imagecreatetruecolor($newwid, $newhei); //建立一个500*320的图片

//将原图复制到新建图片中
//imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)

 imagecopyresampled($images2, $image, 0, 0, 0, 0, $wid,$hei, $imgInfo[0],$imgInfo[1]);
//销毁原始图片
 imagedestroy($image);
//直接输出图片文件

 header("Content-type: ".$imgInfo[&#39;mime&#39;]);
 imagejpeg($images2);
//保存图片 到新文件
 imagejpeg($images2, &#39;new.jpg&#39;, 100); //10代码输出图片的质量 0-100 100质量最高
//销毁
 imagedestroy($images2);
}
imgzip($src,$newwid,$newhei);
?>
Copy after login

The following article shares with you the code for scaling pictures and cutting pictures using PHP. It is very simple and practical. The usage is attached. Friends in need can refer to it.

php proportional scaling of images and cutting image code sharing

/**
 * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型)
 * Author : Specs
 *
 * @param string $source_path 源图片
 * @param int $target_width 目标宽度
 * @param int $target_height 目标高度
 * @param string $fixed_orig 锁定宽高(可选参数 width、height或者空值)
 * @return string
 */
function myImageResize($source_path, $target_width = 200, $target_height = 200, $fixed_orig = &#39;&#39;){
  $source_info = getimagesize($source_path);
  $source_width = $source_info[0];
  $source_height = $source_info[1];
  $source_mime = $source_info[&#39;mime&#39;];
  $ratio_orig = $source_width / $source_height;
  if ($fixed_orig == &#39;width&#39;){
    //宽度固定
    $target_height = $target_width / $ratio_orig;
  }elseif ($fixed_orig == &#39;height&#39;){
    //高度固定
    $target_width = $target_height * $ratio_orig;
  }else{
    //最大宽或最大高
    if ($target_width / $target_height > $ratio_orig){
      $target_width = $target_height * $ratio_orig;
    }else{
      $target_height = $target_width / $ratio_orig;
    }
  }
  switch ($source_mime){
    case &#39;image/gif&#39;:
      $source_image = imagecreatefromgif($source_path);
      break;
     
    case &#39;image/jpeg&#39;:
      $source_image = imagecreatefromjpeg($source_path);
      break;
     
    case &#39;image/png&#39;:
      $source_image = imagecreatefrompng($source_path);
      break;
     
    default:
      return false;
      break;
  }
  $target_image = imagecreatetruecolor($target_width, $target_height);
  imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $target_width, $target_height, $source_width, $source_height);
  //header(&#39;Content-type: image/jpeg&#39;);
  $imgArr = explode(&#39;.&#39;, $source_path);
  $target_path = $imgArr[0] . &#39;_new.&#39; . $imgArr[1];
  imagejpeg($target_image, $target_path, 100);
}
Copy after login

Usage:

myImageResize($filename, 200, 200); //Maximum width and height

myImageResize($filename, 200, 200, 'width'); //Fixed width

myImageResize($filename, 200, 200, 'height'); //Fixed height

Cut the picture to a fixed size:

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[&#39;mime&#39;];
  $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 < $target_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 &#39;image/gif&#39;:
      $source_image = imagecreatefromgif($source_path);
      break;
     
    case &#39;image/jpeg&#39;:
      $source_image = imagecreatefromjpeg($source_path);
      break;
     
    case &#39;image/png&#39;:
      $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);
  $dotpos = strrpos($source_path, &#39;.&#39;);
  $imgName = substr($source_path, 0, $dotpos);
  $suffix = substr($source_path, $dotpos);
  $imgNew = $imgName . &#39;_small&#39; . $suffix;
  imagejpeg($target_image, $imgNew, 100);
  imagedestroy($source_image);
  imagedestroy($target_image);
  imagedestroy($cropped_image);
}
Copy after login

The above is the detailed content of How to use proportional scaling of images in PHP example code. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!