这是我正在谈论的网站 http://makeupbyarpi.com/portfolio.php
你会发现有些图像是按宽度方式进行的。
我使用的代码是:
$width="500";
$height="636";
$img_src = $_FILES['galleryimg']['tmp_name'];
$thumb = "../gallery/".rand(0,100000).".jpg";
//Create image stream
$image = imagecreatefromjpeg($img_src);
//Gather and store the width and height
list($image_width, $image_height) = getimagesize($img_src);
//Resample/resize the image
$tmp_img = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height);
//Attempt to save the new thumbnail
if(is_writeable(dirname($thumb))){
imagejpeg($tmp_img, $thumb, 100);
}
//Free memory
imagedestroy($tmp_img);
imagedestroy($image);
上传的图像很大,有时是3000像素×2000像素,我将它裁剪为500 x 536,并且一些基于风景的图像变得模糊。是否有一个公式,我可以用来仔细裁剪,以便图像出来好?
感谢
答案 0 :(得分:2)
如果需要,您可以调整大小并添加letterbox。您只需要调整宽度,然后计算新的高度(假设宽高比与原始高度相同),如果高度不等于您需要绘制黑色矩形(封面背景)的首选高度,然后居中图像。
你也可以做一个邮筒,但你做的与上面完全相同,只是宽度变为高度,高度变为宽度。
编辑:实际上,你调整最大的那个,如果宽度更大,你调整大小,如果高度更大,那么你调整大小。根据您调整的大小,您的脚本应该是letterbox或pillarbox。
编辑2:
<?php
// Define image to resize
$img_src = $_FILES['galleryimg']['tmp_name'];
$thumb = "../gallery/" . rand(0,100000) . ".jpg";
// Define resize width and height
$width = 500;
$height = 636;
// Open image
$img = imagecreatefromjpeg($img_src);
// Store image width and height
list($img_width, $img_height) = getimagesize($img_src);
// Create the new image
$new_img = imagecreatetruecolor($width, $height);
// Calculate stuff and resize image accordingly
if (($width/$img_width) < ($height/$img_height)) {
$new_width = $width;
$new_height = ($width/$img_width) * $img_height;
$new_x = 0;
$new_y = ($height - $new_height) / 2;
} else {
$new_width = ($height/$img_height) * $img_width;
$new_height = $height;
$new_x = ($width - $new_width) / 2;
$new_y = 0;
}
imagecopyresampled($new_img, $img, $new_x, $new_y, 0, 0, $new_width, $new_height, $img_width, $img_height);
// Save thumbnail
if (is_writeable(dirname($thumb))) {
imagejpeg($new_img, $thumb, 100);
}
// Free up resources
imagedestroy($new_img);
imagedestroy($img);
?>
很抱歉这花了一段时间,我在计算部分遇到了一个小错误,我无法解决这个问题,比如10分钟= /这应该有用。