PHP Redimensionar imagem + marca d'agua

Alan Victor Quinta, 18 de Dezembro de 2014


Um tempo atrás (2012), escrevendo um sistema misto com php e bash e db textual, tive a necessidade de redimensionar imagens adicionando uma marca d’agua. O redimensionamento foi feito em php e a marca d’agua eu utilizei uma ferramenta do linux chamada ImageMagick/Composer que funcionava perfeitamente, mas senti a necessidade de reescrever em um novo projeto com banco relacional. escrevi essa função que redimensiona e adiciona a marca d’agua. Comparando com o código anterior, essa nova função 100% em php, ficou muito mais rápido!

// Alan, função para converter miniaturas + marca d'agua                                                                                                                                       
function Converter($source,$dest) {

        // Configuracoes da funcao
        $qualidade_miniatura = "80";
        $caminho_marcadagua = "imgs/CONVERTER.png";

        if (!is_readable($caminho_marcadagua)) {
                echo "Arquivo de marca dagua não tem permissão de leitura!";
                exit(1);
        }

        if (file_exists($source)) {
                $foto=$source;
                $larg=630;
                $original=imagecreatefromjpeg($foto);
                $larg_foto=imagesx($original);
                $alt_foto=imagesy($original);
                $fator=$alt_foto/$larg_foto;
                $altura_nova=$larg*$fator;
                $saida=imagecreatetruecolor($larg,$altura_nova);
                imagecopyresampled($saida,$original, 0, 0, 0, 0,$larg,$altura_nova,$larg_foto,$alt_foto);
                $arquivos = basename($foto);
                if(imagejpeg($saida,"$dest")) {
                        $stamp = imagecreatefrompng("$caminho_marcadagua");
                        $im = imagecreatefromjpeg("$dest");
                        $marge_right = 10; 
                        $marge_bottom = 10; 
                        $sx = imagesx($stamp);
                        $sy = imagesy($stamp);
                        imagecopy($im, $stamp, (imagesx($im) - $sx - $marge_right)/2, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
                        if(imagejpeg($im, $dest)) {
                                imagedestroy($saida);
                                imagedestroy($original);
                                imagedestroy($stamp);
                                imagedestroy($im);
                                return true;
                        }else{
                                return false;
                        }   
                }else{
                        return false;
                }   
        }else{
                return false;
        }
}