【问题标题】:How to get autocrops offset and size?如何获得自动裁剪偏移量和大小?
【发布时间】:2016-11-14 18:02:43
【问题描述】:

php函数imagecropauto()可以自动裁剪图片。

我猜它会做一些计算并将偏移量和大小作为参数发送到imagecrop() 函数。

我可以从返回的图像中得到大小值,但是有什么办法可以得到偏移值吗?

【问题讨论】:

    标签: php gd


    【解决方案1】:

    这是一个丑陋的解决方案,通过交换右下角的颜色。
    有没有更简单的方法?

    function autocrop_range($image)
    {
        $org_size = array(imagesx($image), imagesy($image));
        $croped = imagecropauto($image, IMG_CROP_SIDES);
        if(!$croped)
        {
            return FALSE;
        }
        $croped_size = array(imagesx($croped), imagesy($croped));
        if($org_size == $croped_size)
        {
            return FALSE;
        }
        imagedestroy($croped);
        $copy = imagecrop($image, array('x' => 0, 'y' => 0, 'width' => $org_size[0], 'height' => $org_size[1]));
        $corner_color = imagecolorat($copy, $org_size[0] - 1, $org_size[1] - 1);
        $r = ($corner_color >> 16) & 0xFF;
        $g = ($corner_color >> 8) & 0xFF;
        $b = ($corner_color) & 0xFF;
        $other_color = imagecolorallocate($copy, $r ^ 0x80, $r ^ 0x80, $r ^ 0x80);
        imagesetpixel($copy, $org_size[0] - 1, $org_size[1] - 1, $other_color); // force botom to stay uncroped
        imagesetpixel($copy, $org_size[0] - 1, $org_size[1] - 2, $other_color); // force right to stay uncroped
        $corner_croped = imagecropauto($copy, IMG_CROP_SIDES);
        imagedestroy($copy);
        $corner_croped_size = array(imagesx($corner_croped), imagesy($corner_croped));
        imagedestroy($corner_croped);
    
        return array('x' => ($org_size[0] - $corner_croped_size[0]), 'y' => ($org_size[1] - $corner_croped_size[1]), 'width' => $croped_size[0], 'height' => $croped_size[1]);
    }
    

    【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多