Sobepor imagens no PHP com a biblioteca GD segue o mesmo caminho do post Adicionando Texto á imagem com PHP.

Vou fazer um exemplo de marca d'agua, mais você poderá usar qualquer tipo de imagem.

Veja exemplo comentado:

<?php
// Carregar imagem já existente no servidor
$imagem = imagecreatefromjpeg( "foto.jpg" );
/* @Parametros
 * "foto.jpg" - Caminho relativo ou absoluto da imagem a ser carregada.
 */

// importa um GIF
$imagemLogo = imagecreatefromgif( "logo.gif" );
/*
 * Você poderá usar aqui qualquer funcção que retorne de imagem:
 * imagecreatefromjpeg, imagecreate, imagecreatetruecolor
 * imagecreatefromPNG não funciona direito com transparencia
 */

// Obtem a largura_nova da imagem
$larguraLogo = imagesx( $imagemLogo );

// Obtém a altura da imagem
$alturaLogo = imagesy( $imagemLogo );

// Calcula X 5px da latreral direira
$x_logo = imagesx( $imagem ) - $larguraLogo - 5;

// Calcula X 5px do rodapé
$y_logo = imagesy( $imagem ) - $alturaLogo - 5;

// Copia a logo para a imagem
imagecopymerge( $imagem, $imagemLogo, $x_logo, $y_logo, 0, 0, $larguraLogo, $alturaLogo, 100 );
/* @Parametros
 * $imagem - Imagem previamente criada Usei imagecreatefromjpeg
 * $imagemLogo - Imagem previamente criada Usei imagecreatefromgif
 * $x_logo - Posição X que a logo será posicionada
 * $y_logo - Posição y que a logo será posicionada
 * 0 - Posição X da imagem de fundo. Não alterei.
 * 0 - Posição Y da imagem de fundo. Não alterei.
 * $larguraLogo - Largura da logo
 * $alturaLogo - Altura da logo
 * 100 - transparencia da logo
 */

// Header informando que é uma imagem JPEG
header( 'Content-type: image/jpeg' );

// eEnvia a imagem para o borwser ou arquivo
imagejpeg( $imagem, NULL, 80 );
/* @Parametros
 * $imagem - Imagem previamente criada Usei imagecreatefromjpeg
 * NULL - O caminho para salvar o arquivo. 
          Se não definido ou NULL, o stream da imagem será mostrado diretamente. 
 * 80 - Qualidade da compresão da imagem.
 */

Veja o exemplo funcionando em http://php.eduardokraus.com/code/10027/index1.php. Estou usando minha foto do facebook.

Quer o código fonte completo deste exemplo? Clique aqui.

Ficou com dúvidas, comente abaixo.

Gostou? Não esqueça de curtir!

21 comentários

Deixe uma resposta

  1. Boa noite eduardo,

    Usei o seu codigo para gerar essa página aqui: http://somosmaisordem.com.br/banner/index2.php

    Porém o formato que vc fez eu não consigo pegar o link jpg da imagem final pra mim colocar em um botão de download.

    imagejpeg( $imagem, NULL, 120 );

    Eu tentei colocar o caminho e o nome.jpg aqui, mas ai a função para de funcionar.

    Pode me ajudar.

     
  2. Não se esqueça que se colocar o caminho para salvar, a pasta tem que ter permissão de escrita

     
  3. Olá,

    Na verdade eu não preciso nem salvar ela, eu preciso é obter o link dela, para usar no botão de compartilhar do facebook e para colocar um botão de fazer dowload da imagem.

    Tem como.

     
  4. Ainda não consegui fazer o botão de download da imagem. Não estou conseguindo pegar um link de uma imagem válida mesmo com o header.

     
  5. oi prof
    vc nao entendeu
    no

    imagecopymerge( $imagem, $imagemLogo, $x_logo, $y_logo, 0, 0, $larguraLogo, $alturaLogo, 100 );
    se redimensiono, ele nao ajusta na largura e altura, ou corta ou fica parte preta.
    como "distorcer" a foto pra encaixar num retangulo?

     
  6. Tratamos via GTalk. Resolvido.

     
  7. como ajustar uma imagem no comando imagecopymerge?
    o logo é maior que a area definida
    como fazer?

     
  8. e se eu nao sei como é a extensao do arquivo que vai ser colado?
    eu tentei mas sai uma mancha preta, e ja tentei de tudo
    :(

     
  9. Mancha preta acontece pela transparencia do PNG.

     
  10. e se mandar tudo via post os dados como eu trato a chegada no ex2.php?
    e como sei que cabe na folha A4 ? tem como saber ?

     
  11. @Vivian

    Uma folha A4 tem dimensões de 210 mm de largura e 297 mm de altura. Isso aproximadamente da 595px por 791px a 72 dpi. Agora desconte as margens e e calcule o restante.

     
  12. professor
    eu uso como blog mesmo.. isso mesmo...

    mas vc nao entendeu, como gerar uma sequencia de arquivos e tambem colocar um texto sequencial na foto

    e no seus exemplos nao vi e tentei mas nao consegui.

    em um formulario entrar com os dados e uma imagem para sobrepor todos estes textos e a imagem sobre a outra.

    como se envia arquivo para o servidor (fotos)?
    e como consegue enviar esta pagina de formulario via POST ?

    e o como sei se a foto cabe em uma folha A4 pois eu fiz o modelo no corel e cabe certinho.

    obrigada

     
  13. tem como deixar a foto para o usuario do wordpress ver quando quiser ?

     
  14. Você, com a imagem salva, poderá fazer o quer for necessário com ela. Inclusive mostrar a quem quiser via qualquer CMS que você tenha.

    Eu não uso o Wordpress e não recomendo usa-lo como CMS de sites. Wordpress foi criado para desenvolver BLOG.

     
  15. mas como é para deixar no servidor para salvar a imagem?
    tem como salvar sequencialmente e informar o visitante deste link deste arquivo no servidor por email ?

     
  16. O método imagejpeg aguarda três parâmetros. Primeiro deles é a imagem a que foi tratada.
    Segundo parâmetro é o caminho que a imagem deverá ser salvo no disco. Se você informar valores diferentes de NULL a função tentará salvar esta imagem.
    Ex: imagejpeg( $imagem, "fotoNova.jpg", 80 );

    Então o exemplo acima irá salvar a imagem com nome de "fotoNova.jpg" no disco. exceto por falta de permissão.

    Veja como enviar e-mail:
    http://php.eduardokraus.com/enviando-e-mail-atraves-do-zend-mail
    E como anexar arquivos a e-mail.
    http://php.eduardokraus.com/anexando-arquivos-no-e-mail

     
  17. oi prof. vc usou ja para gerar certificados com este recurso, modelo do certificado com textos?
    ah e como ver o resultado final depois, se trava o navegador, tem que fazer tudo dinovo?
    bjos
    vivian

     
  18. @Vivian

    Sim. Já usei para gerar certificados. Se travar o navegador e no servidor você marcou para salvar a imagem, tem que conferir se a imagem esta salva. Caso contrário tem que gerar tudo de novo.