TransWikia.com

Criação de imagems com texto 'imagecreate()'

Stack Overflow em Português Asked by Leandro Ferreira on November 3, 2020

Isso vai ser bastante dificil de entender, pelo fato de não ter uma explicação bem dinamica. Tentarei ser o mais claro possivel!

Quero criar um gerador de letras identico a esse:

http://image.prntscr.com/image/359de73d9e0845a7bf0dbd7675ce8a8f.png

Este é o site: http://www.pixelacao.zz.mu/

Porém como tudo comigo tem que ser dificil a criação da imagem deu errado.
não sei onde e nem porque o codigo não executa perfeitamente, e nenhum lugar relata erro.

Revisei o código varias vezes e não consigo achar o erro.

Isto é oque acontece quando executo: http://image.prntscr.com/image/cc41fe8a64bd442f8be94d243a07ab5e.png

<?php

$date = time();
//header("Content-disposition: attachment; filename=$date.png");
header('Content-type: image/png');

error_reporting(10);
$text = $_GET['text'];
$folder = $_GET['folder'];
$spacing = $_GET['space'];
if($spacing == ""){
    $spacing = 0;
}
if($text == ""){
    $text = "Habbo";
    $spacing = -2;
}

if($folder == ""){
    $folder = "wabbo4";
}

if($spacing == ""){
    if($folder == "1"){
        $spacing = 1;
    }
    if($folder == "2"){
        $spacing = 1;
    }
    if($folder == "3"){
        $spacing = -1;
    }
}
$folder = preg_replace("/[^a-zA-Z0-9s]/", "", $folder);
if(!is_dir($folder)){
    $folder = "1";
}

$length = strlen($text);

for($i = 0; $i < $length; $i++){

    $letter = substr($text, $i, 1);
    if($letter == "+"){
        $imgwidth = $imgwidth+5+$spacing;
    }else{
        if (preg_match("/[a-z]/", $letter)) {
            $letterimg = imagecreatefrompng("".$folder."/".$letter.".png"); 
            $letterimgwidth = ImageSX($letterimg);
            $letterimgheight = ImageSY($letterimg);
            $yoffset = 21-$letterimgheight;
            $imgwidth = $imgwidth+$letterimgwidth+$spacing;
        }elseif (preg_match("/[A-Z]/", $letter)){
            $letter = strtolower($letter);
            $letterimg = imagecreatefrompng("".$folder."/".$letter.".png"); 
            $letterimgwidth = ImageSX($letterimg);
            $letterimgheight = ImageSY($letterimg);
            $yoffset = 21-$letterimgheight;
            $imgwidth = $imgwidth+$letterimgwidth+$spacing;
        }else{
            $imgwidth = $imgwidth+5;
        }
    }
}

$imgwidth = $imgwidth-$spacing+1;

$im = imagecreate($imgwidth, $letterimgheight+1);
$overimageheight = $letterimgheight+1;
$background = imagecolorallocatealpha($im, 0, 255, 0, 0);
imagecolortransparent($im, $background);
$xcoord = 1;
for($i = 0; $i < $length; $i++){

    $letter = substr($text, $i, 1);
    if($letter == "+"){
        $xcoord = $xcoord+5+$spacing;
    }else{
        if (preg_match("/[a-z]/", $letter)) {
            $letterimg = imagecreatefrompng("".$folder."/".$letter.".png"); 
            $letterimgwidth = ImageSX($letterimg);
            $letterimgheight = ImageSY($letterimg);
            $yoffset = $overimageheight-$letterimgheight;
            if($letter == "g" || $letter == "j" || $letter == "q" || $letter == "p" || $letter == "y"){
            }
            imagecopy($im, $letterimg, $xcoord, $yoffset, 0, 0, $letterimgwidth, $letterimgheight); 
            $xcoord = $xcoord+$letterimgwidth+$spacing;
        }elseif (preg_match("/[A-Z]/", $letter)){
            $letter = strtolower($letter);
            $letterimg = imagecreatefrompng("".$folder."/".$letter.".png"); 
            $letterimgwidth = ImageSX($letterimg);
            $letterimgheight = ImageSY($letterimg);
            $yoffset = $overimageheight-$letterimgheight;
            imagecopy($im, $letterimg, $xcoord, $yoffset, 0, 0, $letterimgwidth, $letterimgheight); 
            $xcoord = $xcoord+$letterimgwidth+$spacing;
        }else{
            $xcoord = $xcoord+5;
        }
    }
}
header("Content-type: image/png");

imagepng($im); 
imagedestroy($im);

?>

No caso folder seria a pasta onde esta as letras, explicando melhor, o usuario escreve o testo e a folder seria a fonte onde pegaria a letra a,b,c…
space seria o espaço entre as letras por que algumas fontes precisam de um espaço maior.

segue imagem:

http://image.prntscr.com/image/bb8eab9bd39543729de97c456457b8b6.png

O resultado como falei seria o texto formado pelas letras de determinada fonte, porém ele da erro, NÃO RELATA NENHUM ERRO NO PHP.

Preciso dessa ajuda, nunca fui bom com imagecreate();
Espero que tenha sido claro com meu problema.

One Answer

Na verdade não foi muito claro não, na próxima vez tenta melhorar a descrição com imagens, tentativas de falhas e sucesso, casos detalhados de debug, etc...

Enfim, nessa função você deseja inserir um conteúdo (INPUT) e apenas alterar a fonte deste conteúdo ? Se eu estiver correto, fiz um código rapidinho que está auto explicativo, dê uma analisada e qualquer dúvida pergunte.

function generateText() {
    // Getting the values
    var initialText = document.getElementById("initialText").value;
    var finalText = document.getElementById("finalText");
    var fontSource = document.getElementById("fontSource").value;

    finalText.innerHTML = initialText;
    switch (fontSource) {
        case "arial":
            finalText.style.fontFamily = "arial, sans-serif";
            break;
        case "lucida":
            finalText.style.fontFamily = "lucida, sans-serif";
            break;
        case "verdana":
            finalText.style.fontFamily = "verdana, sans-serif";
            break;
    }
}
<input id="initialText" type="text" placeholder="Texto">
<select id="fontSource">
    <option value="arial">Arial</option>
    <option value="lucida">Lucida</option>
    <option value="verdana">Verdana</option>
</select>

<button onclick="generateText()">Alterar fonte</button>
<p id="finalText"></p>
Deseja transformar algum conteúdo da sua página em imagem ? Utilize html2canvas. Resolvendo seu problema ou não, retorne com seu feedback.

Answered by Vitor Gultzgoff on November 3, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP