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 關注
- 186 瀏覽
添加回答
舉報