Logo Hardware.com.br
shift
shift Super Participante Registrado
623 Mensagens 5 Curtidas

Gerando uma imagem com emojies (PHP)

#1 Por shift 17/06/2017 - 01:45
Oi pessoal,
tenho uma dúvida um pouco incomum e já não sei mais a quem recorrer... ninguém do meu network nunca precisou de algo parecido.

Estou desenvendo um sistema que é basicamente exibir emojies na tela.
O usuário escolhe alguns emojies e pode gerar uma imagem desses emojies escolhidos que posteriormente será integrado em lojas web para estampa (não vem ao caso da dúvida... a dúvida está na etapa anterior, gerar a imagem).

Para printar os emojies na tela, estou usando a biblioteca EMOJIONE que já faz todo o trâmite de pegar o unicode e transformar no ícone do emoji.
Então se a pessoa escolher 3 emojies, exemplo: smile.png wink.png frown.png
meu site teria que pegar esses emojies e gerar uma image única com eles, respeitando:
- Tamanho grande
- Fundo transparente

Eu já tentei gerar essa imagem única com 3 bibliotecas/funções do PHP:
GD PHP, Imagick PHP and ImageCreate
Mas o resultado é esse:

Imagem

Código pra gerar a imagem acima:
$emojiCode = ':joy:  :joy:  :joy:';
$doc = new \DOMDocument();
$doc->loadHTML($emojiCode);
$imageTags = $doc->getElementsByTagName('img');

$qtdImgs = $imageTags->length;
if($qtdImgs > 1)
$espacamento = 0;
else
$espacamento = 0;
$merged_image = imagecreatetruecolor((32 * $qtdImgs) + $espacamento, 32);
$white = imageColorAllocate ($merged_image, 255, 255, 255);
$trans = imagecolortransparent($merged_image,$white);
imagealphablending($merged_image, false);
imagesavealpha($merged_image, true);
$i = 0;
foreach($imageTags as $tag) {

$src = $tag->getAttribute('src');
$data = (file_get_contents($src));
$im = imagecreatefromstring($data);
$white = imageColorAllocate ($im, 255, 255, 255);
$trans = imagecolortransparent($im,$white);

imagecopy($merged_image, $im, ($i * 32), 0, 0, 0, 32, 32);
imagedestroy($im);
$i+= 1;
}

header('Content-Type: image/png');
imagepng($merged_image);
imagedestroy($merged_image);





Vi um site que usa CANVAS e fica exatamente assim nesse site:

Imagem



O problema é que quando uso dessa forma do CANVAS, ele tá printando o código HTML do emojie (ao invés do desenho) e gera como um canvas no html, ao invés de gerar a imagem no navegador, mesmo eu setando:
header('Content-Type: image/png');

Código usando CANVAS:
$html = "<canvas id='emojies' width='900' height='250'></canvas>";
$html .= "<script>
var canvas;
var context;

canvas = document.getElementById('emojies');
context = canvas.getContext('2d');
console.log(context);

context.clearRect(0, 0, canvas.width, canvas.height);

context.font = '20px Arial';
context.textAlign = 'center';
context.textBaseline = 'middle';
context.fillText('".Emojione::toImage(':joy:')."', canvas.width / 2, canvas.height / 2);
var dataURL = canvas.toDataURL();
</script>";

echo $html;



Estou usando PHP LARAVEL FRAMEWORK,

Tá muito complexo esse negócio...
alguém consegue me dar uma luz?
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
17/06/2017 - 03:40
Veja só:
[code=php]imagecopy($merged_image, $im, ($i * 32), 0, 0, 0, 32, 32);[/code]

No seu código você gera a imagem com cores brutas => $im
Confere a ela um fundo branco em => $white
Que substitui com transparência em => $trans

Portanto, a imagem gerada com fundo transparente é a $trans.

- Agora explique então por que motivo, razão ou circunstância você utiliza a imagem bruta $im no lugar da transparente $trans que deveria estar naquela linha de código lá em cima?

...
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal