答案#1(已编辑)
在查看这个和这个之后,你可能需要像这样做:
$img->resize(200, 150, 'outside')->crop("center", "center", 200, 150);
在调整大小时,它会将图像调整为完全适合盒子(盒子= 200x150),或者其中一个维度适合而另一个超出盒子。在裁剪时,图像溢出盒子的部分将被修剪。指定中心
智能坐标意味着将删除顶部+底部或左侧+右侧的部分。
答案#2
如果您在计算要裁剪的内容时遇到问题,请尝试以下方法:
<?php
$target_wide = 200;
$target_tall = 150;
$test_case = array(
array(1000, 800),
array(800, 1000),
array(1000, 750),
array(750, 1000)
);
foreach($test_case as $test) {
list(
$source_wide,
$source_tall
) = $test;
$source_aspect_ratio = $source_wide / $source_tall;
$target_aspect_ratio = $target_wide / $target_tall;
if ($source_aspect_ratio > $target_aspect_ratio)
{
$output_tall = $target_tall;
$output_wide = (int) ($target_tall * $source_aspect_ratio);
}
else
{
$output_wide = $target_wide;
$output_tall = (int) ($target_wide / $source_aspect_ratio);
}
$output_crop_hori = (int) (($output_wide - $target_wide) / 2);
$output_crop_vert = (int) (($output_tall - $target_tall) / 2);
var_dump($source_wide, $source_tall, $output_wide, $output_tall, $output_crop_hori, $output_crop_vert);
echo PHP_EOL;
}
输出:
int(1000)
int(800)
int(200)
int(160)
int(0)
int(5)
int(800)
int(1000)
int(200)
int(250)
int(0)
int(50)
int(1000)
int(750)
int(200)
int(150)
int(0)
int(0)
int(750)
int(1000)
int(200)
int(266)
int(0)
int(58)
WideImage
的resize()
方法已经完成了这项工作。但我不确定$fit
应该设置为inside
还是outside
。此外,我无法从文档中理解crop('center', 'center', 200, 150)
是否会将左上角设置为center-100, center-75
或center, center
。 - binaryLV