I'm using imagettftext to draw text on an image using PHP GD
header('Content-Type: image/png');
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$text = 'Test';
$font = 'data/font/arial.ttf';
imagettftext($im, 20, 0, 10, 20, $white, $font, $text);
imagepng($im);
imagedestroy($im);
It's working fine but the problem is that the font file handle is not closed after imagedestroy($im); (inspected with procexp)
And as i expected, I got a Permission denied warning when I tried to unlink the font file.
How to release the used font file? Thank you
I'm testing on windows xampp
Related
I try this code with imagettftext():
// 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.ttf';
// 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);
But it does not work as it should, I have GD and FreeType installed, as you can see:
Anyone can point me in right direction?
Assign variable $font to the absolute path of the font file.
// Replace path by your own font path
$font = 'arial.ttf';
Your code is looking for "arial.ttf" that does not exist. Please copy the font file (arial.ttf) into the same directory of your code.
Try to replace your path to font
$font = 'arial.ttf';
on
$font = __DIR__ .'\Arial.ttf';
or use absolute path (it's not correct but working), if you using windows system
$font = 'c:\WINDOWS\Fonts\Arial.ttf';
I'm trying to use the imagettftext() to add text to an image via PHP. So far I've gone through about 6 different tutorials, trying to get it to work, and I have had no success. I'm currently trying this code from the php documentation page.
<?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.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);
?>
However, nothing shows up. I have the GD library installed, as well as freetype enabled. I have arial.ttf in the same directory as the php file, and I cannot figure out why it wont work. All I get is a blank image.
EDIT: This is the error message "[19-Jan-2014 16:31:07] PHP Warning: imagettftext(): Could not find/open font in /var/www/php/bb/test.php on line 21"
I was about about to tell you to type the real path of the ttf instead of the relative path.
putenv('GDFONTPATH=' . realpath('.'));
or
$font = '/home/user/arial.ttf';
i have a image and i wrote some text on this image by using php "imagettftext" function. now i don't know that how it will save automatic.
header('Content-Type: image/png');
// Create the image
$im = imagecreatefromjpeg('image-1.jpg');
// 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 = 'www.blockprintsonline.com';
// Replace path by your own font path
$font = 'arial.ttf';
list($width, $height, $type, $attr) = getimagesize($get_image);
$width1=$width*20/100;
$height1=$height*50/100;
$font_size=$width*4/100;
// Add some shadow to the text
//imagettftext($im, 30, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, $font_size, 0, $width1, $height1, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
If you want to save the image to a file, check out the docs for the imagepng() function here.
By passing a filename as the second argument it will save the image to a file, e.g:
imagepng($im, "path/to/save/image/in.png");
<?php
// Save the image as 'simpletext.png'
imagepng($im, 'simpletext.png');
// Free up memory
imagedestroy($im);
?>
this is an example on how to save an image.
If you check the documentation for imagepng you would see that you can provide a filename. That would save the image to disk
I am designing my own PHP MVC
in which any Library file can be used by following steps:
Loading the File $this->registry->load->lib('Image');
Accessing Method from the file $this->registry->Image->anyMethod();
The first line loads the file Image.php located in lib folder and returns an instance
as $this->registry->Image
then using that instance, method anyMethod() from the file can be accessed as$this->registry->Image->anyMethod(); fromController
PROBLEM is that, I am not able to Output any image !
the following code do not work if accessed from Controller but works if directly used !
codes taken from http://in2.php.net/imagettftext
public function anyMethod()
{
// 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.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);
}
Please Help , I am stuck.
Note: By adding ob_clean(); before imagepng($im); seems working but without text on the Image .
Add an exit; call after destroying the image to prevent any further output being added by your MVC system:
imagepng($im);
imagedestroy($im);
exit;
Also check there are no other Content-type headers being issued before your anyMethod() call.
What is the best way to display underlined text and output the result as image with GD or any other library?
You can try using the Unicode underline combining character U+0332.
<?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);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = "̲U̲d̲e̲r̲l̲i̲n̲e";
// Replace path by your own font path
$font = 'arial.ttf';
// 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);
?>
There are lots of FREE PHP CAPTCHA out there that come with a lot of customization, download one and see what exactly happens behind the scene. Also have a look at this link
HTH
I am using this...
$font = imageloadfont($font_file);
$font_width = ImageFontWidth($font);
$font_height = ImageFontHeight($font);
$str_width = strlen($text)*$font_width;
ImageLine($image, $left, $top+$font_height, $left+$str_width, $top+$font_height, $color);