Ir para conteúdo
Fórum Script Brasil
  • 0

Marca d'agua


vini_loock

Pergunta

Iai galera! como vai?

Estou fazendo um script para adicionar marca d'agua em um diretório meu.

Mas as imagens tem vários tamanhos, e além da marca, preciso adicionar uma borda, então estou fazendo assim:

Crio um bg de tamanho fixo, pego a imagem e redimensiono para que se encaixe nesse bg, adiciono a imagem ao bg e depois a marca em cima da imagem(isso teóricamente).

Mas o problema é que a função imagecopymerge precisa que a imagem venha direto de um diretório, mas como antes de joga-la no bg em tenho que redimensionar, da um erro dizendo que a imagem não é válida, isso porque está vindo de uma imagecopyresampled().

PHP:

<?php
    //header('Content-Type: image/jpeg');
    
    //propriedades gerais
    $width = 900;
    $height = 800;
    $dir = 'vertical';
    
    $imagem = imagecreatetruecolor($width, $height);
    
    //desenha o fundo
        //Valores iniciais R G B
        $i_r = 255;
        $i_g = 0;
        $i_b = 0;
        
        //Valores finais R G B
        $f_r = 0;
        $f_g = 255;
        $f_b = 0;
        
        //direfença de RED inicial - RED final
        $d_r = $i_r-$f_r;
        
        //diferença de GREEN inicial - GREEN final
        $d_g = $i_g-$f_g;
        
        //diferença de BLUE inicial - BLUE final
        $d_b = $i_b-$f_b;
        

        if($dir == 'vertical'){
            //quantidade de pixel a diminuir por cor RED
            $q_r = $d_r/$width;
            
            //quantidade de pixel a diminuir por cor GREEN
            $q_g = $d_g/$width;
            
            //quantidade de pixel a diminuir por cor BULE
            $q_b = $d_b/$width;
            
            for($i = 0; $i < $height; $i++){
                for($j = 0; $j < $width; $j++){
                    $cor = imagecolorallocate($imagem, $i_r-($q_r*$j), $i_g-($q_g*$j), $i_b-($q_b*$j));
                    imagesetpixel($imagem, $j, $i, $cor);
                }
            }
        }elseif($dir == 'horizontal'){
            //quantidade de pixel a diminuir por cor RED
            $q_r = $d_r/$height;
            
            //quantidade de pixel a diminuir por cor GREEN
            $q_g = $d_g/$height;
            
            //quantidade de pixel a diminuir por cor BULE
            $q_b = $d_b/$height;
            
            for($i = 0; $i < $width; $i++){
                for($j = 0; $j < $height; $j++){
                    $cor = imagecolorallocate($imagem, $i_r-($q_r*$j), $i_g-($q_g*$j), $i_b-($q_b*$j));
                    imagesetpixel($imagem, $i, $j, $cor);
                }
            }
        }else{
            exit(0);
        }    
    //fim do fundo
    
    //propriedades da marca
    $image[0]['url'] = 'images/02.jpg';
    $image[0]['create'] = imagecreatefromjpeg($image[0]['url']);
    list($image[0]['width'], $image[0]['height']) = getimagesize($image[0]['url']);
    
    
    //propriedades da imagem
    $image[1]['url'] = 'images/01.jpg';
    list($image[1]['width'], $image[1]['height']) = getimagesize($image[1]['url']);
    $image[1]['ctc'] = imagecreatetruecolor($width, $height);
    $image[1]['cij'] = imagecreatefromjpeg($image[1]['url']);
    $image[1]['create'] = imagecopyresampled($image[1]['ctc'], $image[1]['cij'], 0, 0, 0, 0, $width-20, $height-20, $image[1]['width'], $image[1]['height']);
    

    
    imagecopymerge($imagem, $image[1]['create'], 10, 10, 0, 0, $image[1]['width'], $image[1]['height'], 80);
    imagecopymerge($imagem, $image[0]['create'], ceil($image[1]['width'] - $image[0]['width'] -10), ($image[1]['height'] - $image[0]['height'] - 10), 0, 0, $image[0]['width'], $image[0]['height'], 80);
    
    imagejpeg($imagem, null, 100);
    imagedestroy($imagem);
?>
Erro:
Warning: imagecopymerge(): supplied argument is not a valid Image resource in C:\wamp\www\ci\marca.php on line 84
linha 84:
imagecopymerge($imagem, $image[1]['create'], 0, 0, 0, 0, $image[1]['width'], $image[1]['height'], 80);

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

amigo, eu não sei se isso te ajuda, mas minha lógica é o seguinte:

1- todas as imgs tem de ser do mesmo tamanho

2- a marca dagua tem de ser do mesmo tamanho do que a imagem

3- chame a varival height de $y e a variavel largura de $x ----> Coordenadas!

4- Não rode em servidor apache, jogue já no servidor e teste

5- Erro: imagecopymerge() esta dizendo que na linha 84 alguma varivel pode ser vazia, teste colocando apos a linha 84 um echo"$imagem"; para cv saber o que você esta recebendo como imagem.

estamos ai!

Link para o comentário
Compartilhar em outros sites

  • 0
1- todas as imgs tem de ser do mesmo tamanho
Porque teriam que ter o mesmo tamanho se eu posso ajustar pelo php?
a marca dagua tem de ser do mesmo tamanho do que a imagem
Não necessariamente, se eu posso dizer na função copy exatamente onde vai ficar posicionada a marca.
hame a varival height de $y e a variavel largura de $x ----> Coordenadas!
Não tem necessidade mudar o nome de uma variavel se eu estiver setando corretamente, e ainda que fica mais legivel height do que x, x pode ser qualquer coisa.
Não rode em servidor apache, jogue já no servidor e teste
Porque eu faria isso?
Erro: imagecopymerge() esta dizendo que na linha 84 alguma varivel pode ser vazia, teste colocando apos a linha 84 um echo"$imagem"; para cv saber o que você esta recebendo como imagem.
Se eu der um exho na variavel 'image[1]['create']', ele não me retornara nada, pois é a parte em que eu redimensionei a image.

O problema que estou tendo é que a imagem vindo dessa variavel deve ser uma imagem criada atraves da função imagecreate(), mas como eu preciso redimensiona-la, penso eu que deveria salva-la e depois criar a imagem salva atravez da imagecreate(), mas eu não quero que seja criada um nova imagem, isso tomaria um bom tempo de execução, queria saber se tem alguma forma de mandar essa imagem redimensionada para a função imagecreatetruecolor().

Não foi de muita serventia sua ajuda, mas valeu a intenção.

Teria uma idéia de o que pode ser feito nesse caso, ou eu devo salvar essa imagem e depois fazer todo o processo?

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, uma vez implementei algo em um site de um amigo meu e nele estava, pela lógica, algo assim, imagine um caderno, você retira um circulo do meio dele, deixando a capa com um buraco. A capa de um caderno é igual ao tamanho da folha.

No Php não é diferente, você tem a folha que é a imagem, e a marca d'agua que é um arquivo .png com areas transparentes simulando o furo da capa do caderno.

Desculpe mas não sei como fazer a imagem ser redimensionada pela função imagecreatetruecolor() como você disse, portanto digo a você para fazer algo simples. coloque para criar uma nova imagem e quando a imagem for carregada, redirecione para uma pagina que contenha um delay, e nessa pagina você exclui a imagem.

Talves ajude! xD

Link para o comentário
Compartilhar em outros sites

  • 0

SIM. Colocar um marca d'agua sei bem como funciona, na verdade o título do tópico é que deveria ser outro, mas a questão é:

Como abrir uma imagem com o php.

Redimensiona-la

Colocar esta imagem sobre outra

e exibir a imagem + fundo se que eu precise salvar a imagem que redimensionei.

Por inquanto resolvi salvar esta imagem depois de redimensionada e depois abri-la e fazer todo o resto do processo, só que isso aumenta o tempo de execução, então se existir a possibilidade de não precisar salvar esta imagem, alguém da um grito ai.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...