3 回答
TA贡献1813条经验 获得超2个赞
你可以更换
$im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $width, 'height' => $slice[$i]]);
和
$im2 = imagecrop($im, ['x' => 0, 'y' => $slice[$i] * $i, 'width' => $width, 'height' => $slice[$i]])
神奇之处在于:每次循环运行时都必须更新 Y 轴。在您的代码中,Y 始终为 0。这就是为什么每次裁剪一部分时,它都从主图像的顶部开始。通过替换 Y 静态值,Y 每次都动态变化,每个图像部分的 Y 轴从上一个裁剪部分被切断的地方开始。
TA贡献1831条经验 获得超10个赞
在 imagecrop 函数中,y坐标始终设置为 0。因此,在循环时,图像从初始坐标裁剪y=0到$slice[$i]
我会建议用户遵循 for 循环:
for($i=0;$i<count($slice);$i++){
$im2 = imagecrop($im, ['x' => 0, 'y' => $slice[$i] - $a, 'width' => $width, 'height' => $slice[$i]]);
if ($im2 !== FALSE) {
imagejpeg($im2, "test/example-$i.jpg");
imagedestroy($im2);
}
}
TA贡献1111条经验 获得超0个赞
你正在改变高度,你应该改变 y 值
...
$a = 0;
while($a<=$height){
$slice[] = $a;
$a+=20;
}
if($a>$height && end($slice) !== $height){
$slice[] = $a+($height-$a);
}
for($i=0;$i<count($slice);$i++){
$im2 = imagecrop($im, ['x' => 0, 'y' => $slice[$i], 'width' => $width, 'height' => 20);
if ($im2 !== FALSE) {
imagejpeg($im2, "test/example-$i.jpg");
imagedestroy($im2);
}
}
...
- 3 回答
- 0 关注
- 127 浏览
添加回答
举报