CristalT
12/30/2019 - 8:41 PM

Crop image

Recorta los espacios vacíos de una imagen PNG y la guarda como JPG.

$png = 'image/path/filename.png';
$img = imagecreatefrompng($png);

//find the size of the borders
$b_top = 0;
$b_btm = 0;
$b_lft = 0;
$b_rt = 0;

//top
for (; $b_top < imagesy($img); ++$b_top) {
    for ($x = 0; $x < imagesx($img); ++$x) {
        if (imagecolorat($img, $x, $b_top) != 0xFFFFFF) {
            break 2; //out of the 'top' loop
        }
    }
}

//bottom
for (; $b_btm < imagesy($img); ++$b_btm) {
    for ($x = 0; $x < imagesx($img); ++$x) {
        if (imagecolorat($img, $x, imagesy($img) - $b_btm - 1) != 0xFFFFFF) {
            break 2; //out of the 'bottom' loop
        }
    }
}

//left
for (; $b_lft < imagesx($img); ++$b_lft) {
    for ($y = 0; $y < imagesy($img); ++$y) {
        if (imagecolorat($img, $b_lft, $y) != 0xFFFFFF) {
            break 2; //out of the 'left' loop
        }
    }
}

//right
for (; $b_rt < imagesx($img); ++$b_rt) {
    for ($y = 0; $y < imagesy($img); ++$y) {
        if (imagecolorat($img, imagesx($img) - $b_rt - 1, $y) != 0xFFFFFF) {
            break 2; //out of the 'right' loop
        }
    }
}

$canvas = imagecreatetruecolor(imagesx($img), imagesy($img));
imagefill($canvas, 0, 0, imagecolorallocate($canvas, 255, 255, 255));
imagealphablending($canvas, TRUE);
imagecopy($canvas, $img, 0, 0, 0, 0, imagesx($img), imagesy($img));
imagedestroy($img);
imagejpeg($canvas, 'firmas_tmp/' . $documento . '.jpg', 90);
imagedestroy($canvas);
unlink($png);