PHP로 이미지 잘라내기
아래 코드는 제가 원하는 이미지를 잘 잘라내지만 더 큰 이미지의 경우에도 효과가 있었습니다.'이미지 확대' 방법이 있습니까?
이상적으로, 나는 매번 좋은 결과를 얻기 위해 자르기 전에 각각의 이미지를 대략 같은 크기로 가질 수 있을 것입니다.
코드는
<?php
$image = $_GET['src']; // the image to crop
$dest_image = 'images/cropped_whatever.jpg'; // make sure the directory is writeable
$img = imagecreatetruecolor('200','150');
$org_img = imagecreatefromjpeg($image);
$ims = getimagesize($image);
imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
imagejpeg($img,$dest_image,90);
imagedestroy($img);
echo '<img src="'.$dest_image.'" ><p>';
미리 보기를 생성하려는 경우 먼저 다음을 사용하여 이미지 크기를 조정해야 합니다.imagecopyresampled();
. 이미지의 작은 변의 크기가 엄지손가락의 해당 변과 같도록 이미지 크기를 조정해야 합니다.
예를 들어 원본 이미지가 1280x800px이고 엄지손가락이 200x150px인 경우 이미지 크기를 240x150px로 조정한 다음 200x150px로 잘라내야 합니다.이미지의 가로 세로 비율이 변하지 않도록 하기 위해서입니다.
썸네일을 만드는 일반 공식은 다음과 같습니다.
$image = imagecreatefromjpeg($_GET['src']);
$filename = 'images/cropped_whatever.jpg';
$thumb_width = 200;
$thumb_height = 150;
$width = imagesx($image);
$height = imagesy($image);
$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;
if ( $original_aspect >= $thumb_aspect )
{
// If image is wider than thumbnail (in aspect ratio sense)
$new_height = $thumb_height;
$new_width = $width / ($height / $thumb_height);
}
else
{
// If the thumbnail is wider than the image
$new_width = $thumb_width;
$new_height = $height / ($width / $thumb_width);
}
$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );
// Resize and crop
imagecopyresampled($thumb,
$image,
0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
0 - ($new_height - $thumb_height) / 2, // Center the image vertically
0, 0,
$new_width, $new_height,
$width, $height);
imagejpeg($thumb, $filename, 80);
이것을 테스트해 본 적은 없지만 작동할 것입니다.
편집
이제 테스트하고 작업 중입니다.
imagecopyresampled()
에서 직사각형 영역을 취할 것입니다.$src_image
폭이 넓은$src_w
키와 키$src_h
제 위치에($src_x, $src_y)
그리고 그것을 직사각형의 영역에 놓으라.$dst_image
폭이 넓은$dst_w
키와 키$dst_h
제 위치에($dst_x, $dst_y)
.
소스 및 대상 좌표와 너비 및 높이가 다를 경우 영상 조각의 적절한 스트레칭 또는 축소가 수행됩니다.좌표는 왼쪽 상단 모서리를 나타냅니다.
이 기능은 동일한 이미지 내의 영역을 복사하는 데 사용할 수 있습니다.하지만 지역이 겹치면 결과를 예측할 수 없게 됩니다.
- 편집 -
한다면$src_w
그리고.$src_h
보다 작습니다$dst_w
그리고.$dst_h
엄지손가락 이미지가 각각 확대됩니다.그렇지 않으면 축소됩니다.
<?php
$dst_x = 0; // X-coordinate of destination point
$dst_y = 0; // Y-coordinate of destination point
$src_x = 100; // Crop Start X position in original image
$src_y = 100; // Crop Srart Y position in original image
$dst_w = 160; // Thumb width
$dst_h = 120; // Thumb height
$src_w = 260; // Crop end X position in original image
$src_h = 220; // Crop end Y position in original image
// Creating an image with true colors having thumb dimensions (to merge with the original image)
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
// Get original image
$src_image = imagecreatefromjpeg('images/source.jpg');
// Cropping
imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
// Saving
imagejpeg($dst_image, 'images/crop.jpg');
?>
php 5.5에는 이미지 크롭 기능이 있습니다. http://php.net/manual/en/function.imagecrop.php
$image = imagecreatefromjpeg($_GET['src']);
다음 항목으로 교체해야 합니다.
$image = imagecreatefromjpeg('images/thumbnails/myimage.jpg');
왜냐면imagecreatefromjpeg()
문자열을 기대하고 있습니다.
저는 이게 통했어요.
참조:
http://php.net/manual/en/function.imagecreatefromjpeg.php
HTML 코드:-
enter code here
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="image" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
업로드.php
enter code here
<?php
$image = $_FILES;
$NewImageName = rand(4,10000)."-". $image['image']['name'];
$destination = realpath('../images/testing').'/';
move_uploaded_file($image['image']['tmp_name'], $destination.$NewImageName);
$image = imagecreatefromjpeg($destination.$NewImageName);
$filename = $destination.$NewImageName;
$thumb_width = 200;
$thumb_height = 150;
$width = imagesx($image);
$height = imagesy($image);
$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;
if ( $original_aspect >= $thumb_aspect )
{
// If image is wider than thumbnail (in aspect ratio sense)
$new_height = $thumb_height;
$new_width = $width / ($height / $thumb_height);
}
else
{
// If the thumbnail is wider than the image
$new_width = $thumb_width;
$new_height = $height / ($width / $thumb_width);
}
$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );
// Resize and crop
imagecopyresampled($thumb,
$image,
0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
0 - ($new_height - $thumb_height) / 2, // Center the image vertically
0, 0,
$new_width, $new_height,
$width, $height);
imagejpeg($thumb, $filename, 80);
echo "cropped"; die;
?>
즉석에서 PHP의 Crop 이미지 기능이 향상되었습니다.
http://www.example.com/cropimage.php?filename=a.jpg&newxsize=100&newysize=200&constrain=1
코드인cropimage.php
$basefilename = @basename(urldecode($_REQUEST['filename']));
$path = 'images/';
$outPath = 'crop_images/';
$saveOutput = false; // true/false ("true" if you want to save images in out put folder)
$defaultImage = 'no_img.png'; // change it with your default image
$basefilename = $basefilename;
$w = $_REQUEST['newxsize'];
$h = $_REQUEST['newysize'];
if ($basefilename == "") {
$img = $path . $defaultImage;
$percent = 100;
} else {
$img = $path . $basefilename;
$len = strlen($img);
$ext = substr($img, $len - 3, $len);
$img2 = substr($img, 0, $len - 3) . strtoupper($ext);
if (!file_exists($img)) $img = $img2;
if (file_exists($img)) {
$percent = @$_GET['percent'];
$constrain = @$_GET['constrain'];
$w = $w;
$h = $h;
} else if (file_exists($path . $basefilename)) {
$img = $path . $basefilename;
$percent = $_GET['percent'];
$constrain = $_GET['constrain'];
$w = $w;
$h = $h;
} else {
$img = $path . 'no_img.png'; // change with your default image
$percent = @$_GET['percent'];
$constrain = @$_GET['constrain'];
$w = $w;
$h = $h;
}
}
// get image size of img
$x = @getimagesize($img);
// image width
$sw = $x[0];
// image height
$sh = $x[1];
if ($percent > 0) {
// calculate resized height and width if percent is defined
$percent = $percent * 0.01;
$w = $sw * $percent;
$h = $sh * $percent;
} else {
if (isset ($w) AND !isset ($h)) {
// autocompute height if only width is set
$h = (100 / ($sw / $w)) * .01;
$h = @round($sh * $h);
} elseif (isset ($h) AND !isset ($w)) {
// autocompute width if only height is set
$w = (100 / ($sh / $h)) * .01;
$w = @round($sw * $w);
} elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
// get the smaller resulting image dimension if both height
// and width are set and $constrain is also set
$hx = (100 / ($sw / $w)) * .01;
$hx = @round($sh * $hx);
$wx = (100 / ($sh / $h)) * .01;
$wx = @round($sw * $wx);
if ($hx < $h) {
$h = (100 / ($sw / $w)) * .01;
$h = @round($sh * $h);
} else {
$w = (100 / ($sh / $h)) * .01;
$w = @round($sw * $w);
}
}
}
$im = @ImageCreateFromJPEG($img) or // Read JPEG Image
$im = @ImageCreateFromPNG($img) or // or PNG Image
$im = @ImageCreateFromGIF($img) or // or GIF Image
$im = false; // If image is not JPEG, PNG, or GIF
if (!$im) {
// We get errors from PHP's ImageCreate functions...
// So let's echo back the contents of the actual image.
readfile($img);
} else {
// Create the resized image destination
$thumb = @ImageCreateTrueColor($w, $h);
// Copy from image source, resize it, and paste to image destination
@ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);
//Other format imagepng()
if ($saveOutput) { //Save image
$save = $outPath . $basefilename;
@ImageJPEG($thumb, $save);
} else { // Output resized image
header("Content-type: image/jpeg");
@ImageJPEG($thumb);
}
}
(PHP 5 > = 5.5.0, PHP 7)에서 기능을 사용하실 수 있습니다.
예:
<?php
$im = imagecreatefrompng('example.png');
$size = min(imagesx($im), imagesy($im));
$im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]);
if ($im2 !== FALSE) {
imagepng($im2, 'example-cropped.png');
imagedestroy($im2);
}
imagedestroy($im);
?>
$image = imagecreatefromjpeg($_GET['src']);
$filename = 'images/cropped_whatever.jpg'
다음 항목으로 교체해야 합니다.
$image = imagecreatefromjpeg($_GET['src']);
그러면 될 거에요!
언급URL : https://stackoverflow.com/questions/1855996/crop-image-in-php
'programing' 카테고리의 다른 글
XML 특성 값에서 큰따옴표를 피하려면 어떻게 해야 합니까? (0) | 2023.09.14 |
---|---|
Excel 2007/2010은 REST 웹 서비스를 어떻게 소비할 수 있습니까? (0) | 2023.09.14 |
테이블이 마음에 드는 내 SQL 대량 드롭 테이블? (0) | 2023.09.14 |
jQuery나 JavaScript에서 "$" 기호의 의미는 무엇입니까? (0) | 2023.09.14 |
문자열을 시간으로 변환 (0) | 2023.09.14 |