Text to Image function just outputs garbage - php

I'm attempting to convert text to an image with a custom font using the textttftext() function. I've scoured the internet for various solutions and nothing seems to work. I've ensured FreeType is enabled, I've attempted the putenv variant as mentioned in the docs, and I've tried different font files. No matter what I try, when I run the script it just outputs garbage to my console (like trying to cat a binary file). Other text-to-image functions work, just not textttftext(). Script is below, almost literally just ripped from the docs (also, I'm using Ubuntu in an EC2 but was having the same issues using WSL):
<?php
header('Content-Type: image/png');
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$text = 'Testing...';
//imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
putenv('GDFONTPATH=' . realpath('.'));
$font = 'arial';
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
imagepng($im);
imagedestroy($im);
?>

Related

Unicode characters is shuffled in php imagettftext

I am trying to print unicode characters in image using GD library
I have following code
$text = "கைவிடப்பட்ட";
$font = "arial.ttf";
$im = imagecreatetruecolor(2500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 2500, 500, $white);
imagettftext($im, 16, 0, 10, 20, $black, $font, $text);
imagepng($im);
imagedestroy($im);
Original text here is கைவிடப்பட்ட , but it prints as following , you can see that first letter is replaced.
Edit : I have tried 5 different fonts All results in same(online font preview is showing characters correctly) . whereas when I echo the string via php(from database) to browser, output is exactly same(கைவிடப்பட்ட), but why imagettftext is switching characters..
I am not sure about GD library and environment but I guess the issue is due to rendering. கை = combination of க + ை and the environment doesn't support the rendering for unicode while displaying. so either check any rendering solution or use non unicode fonts or do below workaround to tackle it in php.
$text = "கைவிடப்பட்ட";
$imgtext = tamilrender($text);
$font = "arial.ttf";
$im = imagecreatetruecolor(2500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 2500, 500, $white);
imagettftext($im, 16, 0, 10, 20, $black, $font, $imgtext);
imagepng($im);
imagedestroy($im);
function tamilrender($input)
{$input= preg_replace("/([க-ஹ])([ைேெ])/u", "$2$1", $input);
$input= preg_replace("/([க-ஹ])ொ/u", "ெ$1ா", $input);
$input= preg_replace("/([க-ஹ])ோ/u", "ே$1ா", $input);
return $input;}
Limitations of Unicode
The Unicode standard policy is to encode only characters, not glyphs. கை, includes a combination character onto க. of Tamil is treated a complex script that requires complex processing, and many software components don't properly handle it.
The best approach would be to find, or create, a php extension library which was written specifically for Tamil.

Weird image glitch when using imagepng()

I am trying to make a gamecard for a RSPS. This is my first time using PHP to generate text on images and when trying to apply this weird glitch happens:
But, when the original photo looks like this:
As you can see the corners are not curved like they should be. But, in the original it comes out fine. I am not talking about the location of the numbers.
Here is the code I am using:
<?php
header('Content-Type: image/png');
// Image Creation
$image_file = "SoulSplitCard.png";
$im = imagecreatefrompng($image_file);
//Colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$rscol = imagecolorallocate($im, 23, 113, 183);
// Levels (for now)
$text = '99';
$text2 = '87';
// Font
$font = 'arial.ttf';
//Text Applications
imagettftext($im, 15, 0, 150, 35, $rscol, $font, $text);
imagettftext($im, 15, 0, 150, 81, $rscol, $font, $text2);
// Using imagepng() instead of imagejpeg()
imagepng($im);
imagedestroy($im);
?>
What is causing this to happen?

Joomla 1.5. Text over image doesn't work

I'm useing Joomla 1.5. I have the script for create image with text over It, but It doesn't work for me:
<?php
// Set the content-type
header('Content-Type: image/png');
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = "ARIAL.TFF";
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
I don't understand why this doesn't work. I found many examples in google, I used It, but always the same.
This error in english means: Image "http://juokoera.lt/a.php" can't be shown, because It have problems (errors).
I found in google, that can be fault by my hosting, I changed It, but the same problem. Help me, please if you can. Thank you very much.
UPDATED:
I got the same error when, code looks like:
dasfasdf
dfas
<?php
header('Content-Type: image/png');
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$text = 'Testing...';
$font = "ARIAL.TTF";
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
imagepng($im);
imagedestroy($im); ?>
How can I use additional text in the same php?
I think your problem is here:
$font = "ARIAL.TFF";
in fact, on your server a file named "ARIAL.TFF" doesn't exist, the font extension you are looking for is TTF, not TFF, and in fact "ARIAL.TTF" on your server exists and i just downloaded it, correct that line to:
$font = "ARIAL.TTF";
After that, you should be able to write text on your image
Hope this helps
UPDATE
After question update, i noticed that an header is sent after printing out some text.
Nothing has to be printed out before the header() function, in order for headers to be correctly sent.
In the PHP manual>header() it is the first thing that is explained:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

imagettftext not working

I've tried to write text in an image just for testing purposes because my Zabbix install is not writing text in the graphs. I've copied the code bellow from the php.net website (http://php.net/manual/en/function.imagettftext.php)
<?php
// Set the content-type
header('Content-Type: image/png');
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
Does anyone have an idea?
I've figure out what was the problem here. Permissions to access the truetype file. PHP could not access the file so it couldn't write.
I was not seeing the problem because I was not running with E_ALL. Now everything is running smoothly
My issue was a wrong offset. The image was showing nothing, no text, no errors in the source code, just a blank file. The paths were correct. I thought there was an error in the ttf font but turns out it was just wrong positioning.
Here's what helped me to see a bit of the text:
imagettftext($im, 20, 0, 20, 20, $fg, $font, $text);
This shows a bit of text on the top right.
Full working code:
putenv('GDFONTPATH=' . dirname(__FILE__));
$font = 'arial'; // located next to the script
imagettftext($im, 20, 0, 20, 20, $fg, $font, $text);
It is a GD function and you will need php-gd installed with gettext & ttf support.
-$

How can I write arabic text in image in PHP

I tried to write an Arabic text in an image with PHP.
This is my code:
<?php
header("Content-Type: image/png; charset=utf8");
$im = imagecreatetruecolor(150, 30);
// Create some colors
$white = imagecolorallocate($im, 100, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$font = 'tahoma.ttf';
$t = strrev('إن الدين عند الله الإسلام');
$text=utf8_encode($t);
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
imagepng($im);
imagedestroy($im);
?>
Thank you.
What’s the output?
The strrev function is not unicode compatible
http://de2.php.net/manual/en/function.strrev.php
See the comments there for examples of unicode compatible ones.
Also see the imagettftext page,
I think the following comment is exactly what you need:
http://de2.php.net/manual/en/function.imagettftext.php#97767
This will work for you:
include("fagd.php");
use imagettftext($im, 20, 0, 10, 20, $black, $font, fagd($text));
fagd.php codes are here:
http://cdn.shirazitco.ir/fagd.txt

Categories