为了账号安全,请及时绑定邮箱和手机立即绑定

如何将图像剪切/分割成碎片 [PHP]

如何将图像剪切/分割成碎片 [PHP]

PHP
烙印99 2023-04-15 17:47:51
我试着创建像这个网站那样的东西(将图像切成碎片)<?php$im = imagecreatefromjpeg('a.jpg');$height = imagesy($im);$width = imagesx($im);$a = 20;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' => 0, 'width' => $width, 'height' => $slice[$i]]);    if ($im2 !== FALSE) {        imagejpeg($im2, "test/example-$i.jpg");        imagedestroy($im2);    }}imagedestroy($im);echo PHP_EOL .'Fck Yeah'. PHP_EOL;?>我想每 20 个像素垂直切片图像,但上面的代码只适用于第一个:'( 
查看完整描述

3 回答

?
慕姐8265434

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 轴从上一个裁剪部分被切断的地方开始。


查看完整回答
反对 回复 2023-04-15
?
慕哥6287543

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);

    }

}


查看完整回答
反对 回复 2023-04-15
?
catspeake

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);

    }

}

...


查看完整回答
反对 回复 2023-04-15
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信