> 백엔드 개발 > PHP 튜토리얼 > PHP에서 이미지 크기를 변경하는 방법에 대한 분석 예

PHP에서 이미지 크기를 변경하는 방법에 대한 분석 예

黄舟
풀어 주다: 2023-03-14 13:28:01
원래의
1729명이 탐색했습니다.

이미지 크기 변경은 매우 일반적인 기능 요구 사항입니다. PHP에서 이미지 크기를 변경하는 방법을 살펴보겠습니다.

먼저 제가 직접 작성한 기능을 소개합니다.

<?php 
$imgsrc = "http://www.nowamagic.net/images/3.jpg"; 
$width = 780; 
$height = 420; 
resizejpg($imgsrc,$imgdst,$width,$height); 
function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight) 
{ 
//$imgsrc jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度 
//取得图片的宽度,高度值 
$arr = getimagesize($imgsrc); 
header("Content-type: image/jpg"); 
$imgWidth = $imgwidth; 
$imgHeight = $imgheight; 
// Create image and define colors 
$imgsrc = imagecreatefromjpeg($imgsrc); 
$image = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图 
imagecopyresampled($image, $imgsrc, 0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]); 
imagepng($image); 
imagedestroy($image); 
} 
?>
로그인 후 복사

imagecopyresampled
imagecopyresampled -- 이미지 복사 부분을 리샘플링하고 크기를 조정합니다.
int imagecopyresampled(resource dst_im, Resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresampled() 한 이미지의 정사각형 영역을 다른 이미지로 복사 부드럽게 픽셀 보간 이미지 내의 값을 유지하므로 특히 선명도를 유지하면서 이미지 크기를 줄일 수 있습니다. dst_im과 src_im은 각각 대상 이미지와 소스 이미지의 식별자입니다. 소스와 대상의 너비와 높이가 다른 경우 이미지는 그에 따라 줄어들거나 늘어납니다. 좌표는 왼쪽 상단을 기준으로 합니다. 이 함수는 동일한 이미지 내에서 영역을 복사하는 데 사용할 수 있지만(dst_im과 src_im이 동일한 경우) 영역이 겹치는 경우 결과를 예측할 수 없습니다.
참고: 팔레트 이미지 제한(255+1 색상)으로 인해 문제가 있습니다. 이미지를 리샘플링하거나 필터링하려면 255개 이상의 색상이 필요한 경우가 많으며, 새로운 리샘플링된 픽셀과 해당 색상을 계산하는 데 근사치가 사용됩니다. 팔레트 이미지에 새 색상을 할당하려고 할 때 실패하면 (이론적으로) 가장 가까운 계산된 색상을 선택합니다. 이것이 항상 시각적으로 가장 가까운 색상은 아닙니다. 이는 비어 있는(또는 시각적으로 비어 있는) 이미지와 같은 이상한 결과를 생성할 수 있습니다. 이 문제를 우회하려면 imagecreatetruecolor()로 생성된 것과 같은 트루컬러 이미지를 대상 이미지로 사용하십시오.
참고: imagecopyresampled()에는 GD 2.0.l 이상이 필요합니다.
간단한 예:

코드는 다음과 같습니다:

<?php 
// The file 
$filename = &#39;test.jpg&#39;; 
$percent = 0.5; 
// Content type 
header(&#39;Content-Type: image/jpeg&#39;); 
// Get new dimensions 
list($width, $height) = getimagesize($filename); 
$new_width = $width * $percent; 
$new_height = $height * $percent; 
// Resample 
$image_p = imagecreatetruecolor($new_width, $new_height); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
// Output 
imagejpeg($image_p, null, 100); 
?>
로그인 후 복사


예 2:

<?php 
// The file 
$filename = &#39;test.jpg&#39;; 
// Set a maximum height and width 
$width = 200; 
$height = 200; 
// Content type 
header(&#39;Content-Type: image/jpeg&#39;); 
// Get new dimensions 
list($width_orig, $height_orig) = getimagesize($filename); 
$ratio_orig = $width_orig/$height_orig; 
if ($width/$height > $ratio_orig) { 
$width = $height*$ratio_orig; 
} else { 
$height = $width/$ratio_orig; 
} 
// Resample 
$image_p = imagecreatetruecolor($width, $height); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); 
// Output 
imagejpeg($image_p, null, 100); 
?>
로그인 후 복사


이미지 크기를 변경하는 방법에는 두 가지가 있습니다.
ImageCopyReised() 함수는 모든 GD 버전에서 작동하지만, 이미지의 크기 조정 알고리즘은 비교적 조잡합니다.
ImageCopyResamples()를 사용하면 픽셀 보간 알고리즘으로 얻은 이미지 가장자리가 비교적 매끄러워집니다. (그러나 이 함수는 ImageCopyResize()보다 느립니다.)
두 함수의 매개변수는 다음과 같습니다.

코드는 다음과 같습니다.

imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); 
imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);
로그인 후 복사


예:

<?PHP 
$src = ImageCreateFromJPEG(&#39;php.jpg&#39;); 
$width = ImageSx($src); 
$height = ImageSy($src); 
$x = $widht/2; 
$y = $height/2; 
$dst = ImageCreateTrueColor($x,$y); 
ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height); 
header(&#39;Content-Type : image/png&#39;); 
ImagePNG($det); 
?>
로그인 후 복사


php에서 jpg 이미지 파일의 크기를 변경하는 방법

The 코드는 다음과 같습니다:

<? 
function resize_jpg($img,$w,$h){ 
// $thumb = imagecreate ($w, $h); 
$image = imagecreatefromjpeg($img); 
$imagedata = getimagesize($img); 
if ($h = "auto") $h = $w/($imagedata[0]/$imagedata[1]);//根据原图的纵横比得出高度! 
$thumb = imagecreatetruecolor ($w, $h); 
imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0], $imagedata[1]); 
imagejpeg($thumb); 
} 
//resize_jpg($file,$w,$h); 
resize_jpg("images/dsc01244.jpg",100,100); 
imagedestory($thumb); 
imagedestory($image); 
?>
로그인 후 복사


기능 코드:

<?php 
/* 
* 图片缩略图 
* $srcfile 来源图片, 
* $rate 缩放比,默认为缩小一半,或者具体宽度象素值 
* $filename 输出图片文件名jpg 
* 例如: resizeimage("zt32.gif",0.1); 
* 例如: resizeimage("zt32.gif",250 ); 
* 说明:调用时直接把函数的结果放在HTML文件IMG标签中的SRC属性里 
*/ 
function resizeimage($srcfile,$rate=.5, $filename = "" ){ 
$size=getimagesize($srcfile); 
switch($size[2]){ 
case 1: 
$img=imagecreatefromgif($srcfile); 
break; 
case 2: 
$img=imagecreatefromjpeg($srcfile); 
break; 
case 3: 
$img=imagecreatefrompng($srcfile); 
break; 
default: 
exit; 
} 
//源图片的宽度和高度 
$srcw=imagesx($img); 
$srch=imagesy($img); 
//目的图片的宽度和高度 
if($size[0] <= $rate || $size[1] <= $rate){ 
$dstw=$srcw; 
$dsth=$srch; 
}else{ 
if($rate <= 1){ 
$dstw=floor($srcw*$rate); 
$dsth=floor($srch*$rate); 
}else { 
$dstw=$rate; 
$rate = $rate/$srcw; 
$dsth=floor($srch*$rate); 
} 
} 
//echo "$dstw,$dsth,$srcw,$srch "; 
//新建一个真彩色图像 
$im=imagecreatetruecolor($dstw,$dsth); 
$black=imagecolorallocate($im,255,255,255); 
imagefilledrectangle($im,0,0,$dstw,$dsth,$black); 
imagecopyresized($im,$img,0,0,0,0,$dstw,$dsth,$srcw,$srch); 
// 以 JPEG 格式将图像输出到浏览器或文件 
if( $filename ) { 
//图片保存输出 
imagejpeg($im, $filename ); 
}else { 
//图片输出到浏览器 
imagejpeg($im); 
} 
//释放图片 
imagedestroy($im); 
imagedestroy($img); 
} 
?>
로그인 후 복사


위 내용은 PHP에서 이미지 크기를 변경하는 방법에 대한 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿