Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Milena Adão

Criando imagem

Recommended Posts

Boa tarde, estou fazendo um programa na área de caldeiraria. Uma das funções desde sistema é imprimir o molde de uma curva de gomo(Tipo de peça que a empresa fabrica). O usuário digita o diâmetro da curva, e o programa retorna o molde para que a peça seja fabricada de acordo com os valores calculados. Bom, os cálculos estão certinhos, porém não sei como fazer para mostrar o molde na tela, estou utilizando um gráfico para testar, mas ele não me atende totalmente, pois o desenho deve ficar igual este do exemplo abaixo:
Como devo fazer para criar uma imagem como? Sendo que, ja tenho o valor de cada linha vertical, e o espaçamento entre elas?
http://3.bp.blogspot.com/-uZ9jrTXxFwo/T8DrqzVZsGI/AAAAAAAAAt4/_h3GRiFgEb0/s1600/1.JPG


O
brigada!
Milena.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei utilizar o imagecreate() mas não tive sucesso.
Ativei ele no php.ini, retiranto a virgula no gd2.dll. Eu utilizo o wampserver, mas em meu navegador
não aparece a imagem, mas também não mostra nenhum erro. Fica só um quadradinho com ícone de que a imagem não pode ser exibida. O que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre o que fez até o momento para gerar a imagem que fica mais fácil te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz alguns testes para ver se a função estava funcionando, mas nenhum funcionou. Por exemplo:

header("Content-Type: image/jpeg");
$img=imagecreate(100,50);
$cor_fundo = imagecolorallocate($img, 255,0,0);
$cor = imagecolorallocate($img, 0,0,255);
imagestring($img, 2, 10,10, 'ola mundo', $cor);
imagejpeg($img);
ImageDestroy($img);

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o que aparece de erro?

Comente o header para exibir as mensagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso pedi para tirar a linha do header, para que exiba as mensagens de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exibe isto na tela quando retiro o header:

˙Ř˙ŕJFIF˙ţ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ˙ŰC $.' ",#(7),01444'9=82<.342˙ŰC 2!!22222222222222222222222222222222222222222222222222˙Ŕ2d"˙Ä ˙ĵ}!1AQa"q2‘ˇ#B±ÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz„…†‡‰Š’“”•–—™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙ĵw!1AQaq"2B‘ˇ±Á #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚„…†‡‰Š’“”•–—™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú?â袚dA Śş‡<…Ď'𯛌e/…\ýľRŚwvEF˛«y™Dg[™ĎÓžŽ®ˇ‘)čAČŞť)ĂY-?Í]ké©1« hźô´´S|ÄŢSzîĎ>´y‰…;× ČçŻůČüé{)íĘţáűHot:Š`–2ŞÂDÚÇ wč)xÜG‡ťC*’3ŹĄ_ŐęŮľW¦úz˙“'ŰŇş\Ë_?ëą%QXš…Q@Q@Wh\ČŔmŘî®NyÇ˙€ú÷«VÔ+΄śˇýjšűšOó1­F5’Śż­ü›+ůRţ˙î®ö¸cČŔ

Compartilhar este post


Link para o post
Compartilhar em outros sites

Copiei seu código e ele está certo. Ele exibiu corretamente uma imagem vermelha com escrita azul.

Esta saída que você colocou ai é do conteúdo de uma imagem.

Este é todo o código PHP ou você colocou ele no meio de um html?

Outra coisa, verifique se no inicio do arquivo não tem nenhum espaço em branco, bem como no final do arquivo (caso esteja fechado a tag PHP).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código completo. Não tem espaço no inicio e fim do arquivo, retirei todo o html e o arquivo menu_1.html, mesmo assim não funcionou.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<link rel="stylesheet" href="detalhes.css" type="text/css" />
<link rel="stylesheet" href="menu_style.css" type="text/css" />
</head>
</html>
<?php
include("menu_1.html");
echo"<form method='post' action='curva_gomo.php' >" ;
echo" <table>
<tr><td class='td1'> Diam. </td><td class='td1'><input type='text' name='diam' /></td></tr>
<tr><td class='td1'> Qtd.Gomos </td><td class='td1'><input type='text' name='gomos' /></td></tr>
<tr><td class='td1'> Grau da Curva </td><td class='td1'><input type='text' name='graucurva' /></td></tr>
<tr><td class='td1' colspan='2'><input type='submit' name='calcular' /></td></tr>
</table>";
if(isset($_POST['calcular']))
{
$diam = $_POST['diam'];
$rzao = $diam;
$rzinho = $diam/2;
$gomo = $_POST['gomos'];
$graucurva = $_POST['graucurva'];
$alfa = ($graucurva/$gomo)/2;
$tangente = tan(deg2rad($alfa)) ;
$grau=0;
$aumenta=0;
for($a=0;$a<=12;$a++)
{
$cosseno = cos(deg2rad($grau)) ;
$total = ($rzao+$cosseno*$rzinho)*$tangente;
$grau+=15;
$alturas[$a] = number_format($total,2,',','.'); ;
$total=($total);
$aumenta++;
}
$com=$diam*3.14;
$individual=$com/24;
//------------------------------------CÓDIGO EXEMPLO DE CRIAÇÃO DE IMAGEM---------------------------
$img=imagecreate(100,50);
$cor_fundo = imagecolorallocate($img, 255,0,0);
$cor = imagecolorallocate($img, 0,0,255);
imagestring($img, 2, 10,10, 'ola mundo', $cor);
imagejpeg($img);
ImageDestroy($img);
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está ai no que você mostrou, Milena.

Um arquivo de PHP que gera imagem, deve conter somente a saída da imagem.

Você colocou ele no meio de um html, e foi que o que perguntei um post antes:

Este é todo o código PHP ou você colocou ele no meio de um html?

Você pode até ter outros códigos, mas no final, deve ter somente a saída da imagem.

Para funcionar, faça o seguinte:

  1. Crie um arquivo chamado imagem.php;
  2. Coloque o conteúdo que gera a imagem (imagecreate ... até imagejpeg) neste arquivo;
  3. Neste html que você mostrou, coloque uma tag de imagem que chame este arquivo, exemplo:
    <img src="imagem.php" alt="">

     

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Praticamente qualquer coisa você pode criar. O caso é só acertar a formula para conseguir as arestas corretas.

Fazendo um teste com um cálculo bem simples, somente para ilustrar:

 

header('Content-Type: image/jpeg');

$partes = 30;
$maior = 35;
$menor = 5;
$espaco = 5;
$padding = 10;


$width = ($padding * 4) + ($espaco * 2 * ($partes));
$height = ($padding * 2) + $maior;
$step = ($maior - $menor) / $partes / 2;

$img = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
$orange = imagecolorallocate($img, 255, 123, 0);

imagefill($img, 0, 0, $orange);

$x = $padding;
for($i=0; $i<=$partes; $i++){
	$currStep = $menor + ($step  - ($step * $i));
	imageline($img, $x, $padding + $currStep, $x, $height - $padding - $currStep, $black);
	$x += $espaco;
}

for($i = $partes-1; $i >= 0; $i--){
	$currStep = $menor + ($step  - ($step * $i));
	imageline($img, $x, $padding + $currStep, $x, $height - $padding - $currStep, $black);
	$x += $espaco;
	
}



imagejpeg($img, '', 90);

Compartilhar este post


Link para o post
Compartilhar em outros sites
Deu certinho, muito obrigada mesmo!!!
Mas que fiquei com uma duvida, a pagina que contém html, a mesma que possui o código (<img src='imagem.php' />) para que a imagem criada possa ser exibida, está com o vetor das alturas, pois o usuário digita o diâmetro da peça e outras variáveis para que mostre o desenho dela. Estas alturas coloquei em um vetor, como vou enviar o vetor como parâmetro para a página: imagem.php ?





<?php
$alturas[12]=60.29;
$alturas[11]=59.60;
$alturas[10]=57.60;
$alturas[9]=54.4;
$alturas[8]=50.24;
$alturas[7]=43.39;
$alturas[6]=40.19;
$alturas[5]=34.99;
$alturas[4]=30.14;
$alturas[3]=25.98;
$alturas[2]=22.79;
$alturas[1]=20.78;
$alturas[0]=19.99;
$partes = 12;
$espacototal = 47.1 ;
$espaco= $espacototal/12;
$meio =1500/2;
$maior=60.29;
$img = imagecreatetruecolor(1500, 1500);
$black = imagecolorallocate($img, 0, 0, 0);
$orange = imagecolorallocate($img, 255, 255, 255);
$green = imagecolorallocate($img, 153, 204, 153);
$red = imagecolorallocate($img, 255,0, 0);
$textcolor = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 750, 750, $orange);
$x=0;
for($i=0; $i<=$partes-1; $i++)
{
$dif = $maior-$alturas[$i];
$dif2=$maior+$alturas[$i];
if($i<11)
{
$dif_prox = $maior-$alturas[$i+1];
$dif_prox2 = $maior+$alturas[$i+1];
}
imageline($img, $x, $dif, $x, $dif2+12, $black); //linha de altura preta superior
imagestringup($img, 2, $x-3, $dif_prox2+40, $alturas[$i], $black); //valor alturas
imageline($img, $x, $maior, $x+$espaco, $maior, $green);//linha verde do meio
if($i==0)
{
imageline($img, $x, $dif, $x, $maior-$alturas[12], $green);// linha verde superior
imageline($img, $x, $maior-$alturas[12], $x+$espaco, $maior-$alturas[12], $green);// linha verde superior
imageline($img, $x+$espaco, $dif, $x+$espaco,$maior-$alturas[12], $green);// linha verde superior
imagestring($img, 2, $x+4, $maior-$alturas[12], $espaco, $green);//valor verde do meio
}
imageline($img, $x, $dif, $x+$espaco, $dif_prox, $red);// linha vermelha superior
imageline($img, $x, $dif2, $x+$espaco, $dif_prox2, $red);// linha vermelha inferior
$x+=$espaco;
}
//
imageline($img, 0, $dif2+80, $x*2, $dif2+80, $red);// linha vermelha tamanho total
imagestring($img, 3, $x, $dif2+85, $espacototal, $red);//valor linha vermelha tamanho total
for($i = $partes; $i >= 0; $i--)
{
$dif = $maior-$alturas[$i];
$dif2=$maior+$alturas[$i];
if($i>0)
{
$dif_prox = $maior-$alturas[$i-1];
$dif_prox2 = $maior+$alturas[$i-1];
}
imageline($img, $x, $dif, $x, $dif2+12, $black); //linha de altura preta superior
imagestringup($img, 2, $x-3, $dif_prox2+40, $alturas[$i], $black); //valor alturas
if($i>0)
{
imageline($img, $x, $dif, $x+$espaco, $dif_prox, $red);//linha vermelha superior
imageline($img, $x, $maior, $x+$espaco, $maior, $green);//linha verde
imageline($img, $x, $dif2, $x+$espaco, $dif_prox2, $red);//linha vermelha inferior
}
$x+=$espaco;
}
imagejpeg($img);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom existem várias formas, mas que me vieram na memória agora são:

  • Gravar os dados que serão usados em sessão - piece of cake
  • Gravar os dados em arquivo ou banco de dados

Vou dar o exemplo com sessão:

 

index.php (que contém o HTML)

<?php
// esta tag tem que estar logo no inicio do arquivo, sem espaços em branco
session_start();

// aqui, antes do HTML, verifica se algo foi enviado via POST para calcular
if(isset($_POST['calcular'])) {
   // .... faz o que tem que fazer e armazena os dados na sessão
   $_SESSION['dados_imagem'] = $vetor_dados_imagem;
} else {
   $_SESSION['dados_imagem'] = null;
}
?>
<html>
<head>
<title> ... </title>
</head>
<body>
  <?php
  // se tiver dados 
  if(!empty($_SESSION['dados_imagem'])) {
     echo '<img src="imagem.php" alt="">';
  }
  ?>
</body>
</html>

imagem.php (o que vai gerar a imagem)

<?php

session_start();

$vetor = $_SESSION['dados_imagem'];

// gera a imagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.