php+imageftext,imagestring

用户评论:

[#1]

Booteille [2015-01-14 00:56:49]

Here is a function with similar declaration of imagestring() but who handles whitespaces (It creates new lines and 4 spaces instead of \n and \t) and image's size limits

for($i=0,$exploded_string=explode("\n",$string),$i_count=count($exploded_string);$i

for($j=0;$j

if($next_offset_y>=$image_height-$y) {

return;

}

}

}

}?>

[#2]

jordanslost at gmail [2009-09-04 16:52:27]

Here is a small bit I made for writing to a image from right to left when you are limited to imagestring()

$pageview_letters=preg_split('//',$string, -1);// Form are original array of letters.$minus=6;// The letter spacing in pixels$first=true;// Whether or not we have started the string$x=375;// X Location of imagestring$y=23;// Y Location of imagestring$letters= array();// Initiate the array o letters.foreach ($pageview_lettersas$letter) {$letters[] =$letter;

}$letters=array_reverse($letters);

foreach ($lettersas$letter) {

if ($first) {imagestring($image,2,$x,$y,$letter,$light_blue);$first=false;

} else {$x= ($x-$minus);imagestring($image,2,$x,$y,$letter,$light_blue);

}

}?>

[#3]

eric dot brison at anakeen dot com [2009-04-24 00:51:47]

Same function as above but it can display multi-line strings.

foreach ($tsas$k=>$string) {//compute width$width=max($width,strlen($string));

}// Create image width dependant on width of the string$width=imagefontwidth($font_size)*$width;// Set height to that of the font$height=imagefontheight($font_size)*count($ts);$el=imagefontheight($font_size);$em=imagefontwidth($font_size);// Create the image pallette$img=imagecreatetruecolor($width,$height);// Dark red background$bg=imagecolorallocate($img,0xAA,0x00,0x00);imagefilledrectangle($img,0,0,$width,$height,$bg);// White font color$color=imagecolorallocate($img,255,255,255);

foreach ($tsas$k=>$string) {// Length of the string$len=strlen($string);// Y-coordinate of character, X changes, Y is static$ypos=0;// Loop through the stringfor($i=0;$i

}

}// Return the imageheader("Content-Type: image/png");imagepng($img);// Remove imageimagedestroy($img);

}?>

[#4]

mike at mike-griffiths dot co dot uk [2008-12-19 12:07:56]

I created an alternative using the function imagechar to create a string of an image.  The below function below was used to create an image the same height and width of the text string.  It is used on my website to mask users email addresses.

}// Return the imageheader("Content-Type: image/gif");imagegif($img);// Remove imageimagedestroy($img);?>

[#5]

keksnicoh at googlemail dot com [2008-11-02 10:42:17]

Some fun with imagestring:

This function is a product of too much time..

It opens an image and create a new image with one letter instead of a pixel.

error_reporting(E_ALL);functionpixelfuck($url,$chars='ewk34543??G??$??$Tg34g4g',$shrpns=1,$size=4,$weight=2)

{

list($w,$h,$type) =getimagesize($url);$resource=imagecreatefromstring(file_get_contents($url));$img=imagecreatetruecolor($w*$size,$h*$size);$cc=strlen($chars);

for($y=0;$y

for($x=0;$x

return$img;

}$url='http://upload.wikimedia.org/wikipedia/commons/b/be/Manga_Icon.png';$text='I-dont-like-manga-...-Why-do-they-have-such-big-eyes? Strange-...-WHAT-WANT-YOU-DO?';Header('Content-Type: image/png');imagepng(pixelfuck($url,$text,1,6));?>

Have fun  :)

[#6]

Abubaker dot shamlan at gmail dot com [2008-08-19 15:02:07]

this is a function that is based on imagestring but it produces text in the center of an image i hope it helps :D

}?>

[#7]

mustafa at hafunny dot info [2008-08-14 02:42:53]

If you have any problem with CentralEurope's words, for example : ???????????????????, I am try this problem by iconv() function.

[#8]

sk89q [2008-03-14 14:10:47]

Creates a box of text. Has horizontal and vertical alignment, box arguments, and custom leading. I submitted this to the manual in 2003 actually, but it disappeared after a year or so (not sure why). Here it is again.

define("ALIGN_LEFT","left");define("ALIGN_CENTER","center");define("ALIGN_RIGHT","right");define("VALIGN_TOP","top");define("VALIGN_MIDDLE","middle");define("VALIGN_BOTTOM","bottom");

functionimagestringbox(&$image,$font,$left,$top,$right,$bottom,$align,$valign,$leading,$text,$color)

{// Get size of box$height=$bottom-$top;$width=$right-$left;// Break the text into lines, and into an array$lines=wordwrap($text,floor($width/imagefontwidth($font)),"\n",true);$lines=explode("\n",$lines);// Other important numbers$line_height=imagefontheight($font) +$leading;$line_count=floor($height/$line_height);$line_count= ($line_count>count($lines)) ? (count($lines)) : ($line_count);// Loop through linesfor ($i=0;$i

{// Vertical Alignswitch($valign)

{

caseVALIGN_TOP:// Top$y=$top+ ($i*$line_height);

break;

caseVALIGN_MIDDLE:// Middle$y=$top+ (($height- ($line_count*$line_height)) /2) + ($i*$line_height);

break;

caseVALIGN_BOTTOM:// Bottom$y= ($top+$height) - ($line_count*$line_height) + ($i*$line_height);

break;

default:

returnfalse;

}// Horizontal Align$line_width=strlen($lines[$i]) *imagefontwidth($font);

switch($align)

{

caseALIGN_LEFT:// Left$x=$left;

break;

caseALIGN_CENTER:// Center$x=$left+ (($width-$line_width) /2);

break;

caseALIGN_RIGHT:// Right$x=$left+ ($width-$line_width);

break;

default:

returnfalse;

}// Drawimagestring($image,$font,$x,$y,$lines[$i],$color);

}

returntrue;

}?>

[#9]

eviloverlord+php at gmail dot com [2008-01-03 15:28:40]

Simple script to convert a string (such as an email addresses) to a transparent image.

Usage:

">

From a spambot's point of view, they see:

Optional parameters:

font_size: 1 to 5, with the default at 3

R/G/B: the font color, in hex.

Usage:

&font_size=4&R=FF&G=FF&B=00">

or die("Cannot Initialize new GD image stream");//Make it transparentimagesavealpha($img,true);$trans_colour=imagecolorallocatealpha($img,0,0,0,127);imagefill($img,0,0,$trans_colour);//Get the text color$text_color= isset($_GET['R'],$_GET['G'],$_GET['B']) ?imagecolorallocate($img,hexdec($_GET['R']),hexdec($_GET['G']),hexdec($_GET['B'])) :imagecolorallocate($img,0,0,0);//Draw the stringimagestring($img,$font_size,0,0,$string,$text_color);//Output the imageimagepng($img);imagedestroy($img);?>

[#10]

Epidemiah [2008-01-03 05:06:11]

Its just an easy function to write an string in the middle of a picture.

{

if($font<0||$font>5){$font=0; }$num= array(array(4.6,6),

array(4.6,6),

array(5.6,12),

array(6.5,12),

array(7.6,16),

array(8.5,16));$width=ceil(strlen($text) *$num[$font][0]);$x=imagesx($img) -$width-8;$y=Imagesy($img) - ($num[$font][1] +2);imagestring($img,$font,$x/2,$y/2,$text,$color);

}?>

[#11]

jlamer [2007-02-18 18:00:18]

//  Example of use...

//  This is a simple function to output text to an image

//  which is centered (as much as I want to do by eye)

//  and wrapped

//    Just remember that all the sizes are guessed

// doesn't cut on the space (only on number of characters)

//  or change color of text, but this isn't for that...

function imageCenterString( $imgw, $imgh,

$image_text = '', $text_size=5 )

{

$im = imagecreate( $imgw, $imgh );

// white background and blue text

$bg = imagecolorallocate($im, 255, 255, 255);

$textcolor = imagecolorallocate($im, 0, 0, 0);

$t_h = $t_w = $t_x = $t_y = 0;

$base_w =9; $base_h = 16;

$m = 0.88;

switch ( $text_size )

{

case 1: $t_w = $base_w*pow(($m*.98),4);

$t_h = $base_h*pow(($m*.98),4);

break;

case 2: $t_w = $base_w*pow($m,3);

$t_h = $base_h*pow($m,3);

break;

case 3: $t_w = $base_w*pow($m,2);

$t_h = $base_h*pow($m,2);

break;

case 4: $t_w = $base_w*$m;

$t_h = $base_h*$m;

break;

case 5: $t_w = $base_w;

$t_h = $base_h;

break;

default:

if ( $text_size >= 5 ) // set to 5

{   $t_w = $base_w; $t_h = $base_h; }

if ( $text_size 

{

$t_w = $base_w*pow(($m*.98),4);

$t_h = $base_h*pow(($m*.98),4);

}

break;

}

$text_array = array();

$max = floor($imgw/$t_w);

for( $i=0; strlen($image_text) > 0; $i += $max)

{

array_push($text_array, substr($image_text,0,$max));

if ( strlen($image_text) >= $max )

{   $image_text = substr($image_text,$max); }

else

{   $image_text = ''; }

}

$t_y = ($imgh/2) - ($t_h*count($text_array)/2);

foreach ( $text_array as $text )

{

$t_x = ($imgw/2)-($t_w*strlen($text)/2);

imagestring($im, $text_size, $t_x, $t_y,

$text, $textcolor);

$t_y += $t_h;

}

// output the image

header("Content-type: image/gpeg");

imagejpeg($im);

}

[#12]

gannon (at) portablesofdoom (dot) org [2006-12-27 18:53:42]

I like this better than "tjpoe at cableaz dot com"'s function for wrapping text to fit width (auto-adjusts height as needed) since it doesn't only do 1 word per line.

function make_wrapped_txt($txt, $color=000000, $space=4, $font=4, $w=300) {

if (strlen($color) != 6) $color = 000000;

$int = hexdec($color);

$h = imagefontheight($font);

$fw = imagefontwidth($font);

$txt = explode("\n", wordwrap($txt, ($w / $fw), "\n"));

$lines = count($txt);

$im = imagecreate($w, (($h * $lines) + ($lines * $space)));

$bg = imagecolorallocate($im, 255, 255, 255);

$color = imagecolorallocate($im, 0xFF & ($int >> 0x10), 0xFF & ($int >> 0x8), 0xFF & $int);

$y = 0;

foreach ($txt as $text) {

$x = (($w - ($fw * strlen($text))) / 2);

imagestring($im, $font, $x, $y, $text, $color);

$y += ($h + $space);

}

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

die(imagejpeg($im));

}

[#13]

iibm at free dot fr [2006-12-14 02:21:50]

I've made a little modification of the (quite usefull) imagestringcutted function (when align=center, it doesn't work well for me if x1!=0) so juste replace the last line with :

elseimagestring($img,$font,$x1+($x2-$x1)/2-strlen($text) *$fontwidth/2,$y,$text,$color);

}?>

[#14]

Piotr dot Sulecki at traxelektronik dot pl [2006-11-09 03:18:55]

The built-in fonts used to be in latin-2 (iso8859-2) encoding. For some time, they are in latin-1 (iso8859-1) encoding. There is no way to change the encoding at all. If you need to use any other encoding, you have to use TrueType fonts.

[#15]

god at in-heaven dot org [2006-10-18 14:47:37]

Here's a simple function for creating an aligned string which is cutted to match the space between $x1 and $x2

if($fullwidth>$maxwidth) {

for($i=0;$i$targetwidth;$i++) { }$text=substr($text,0,(strlen($text)-$i)-4)."...";

}

if($align=="left")imagestring($img,$font,$x1,$y,$text,$color);

elseif($align=="right")imagestring($img,$font,$x2- ((strlen($text) *$fontwidth)),$y,$text,$color);

elseimagestring($img,$font,($x2-$x1)/2-strlen($text) *$fontwidth/2,$y,$text,$color);

}?>

Usage:

imagestringcutted($img,$font,$y,$x1,$x2,$text,$color,$align);?>

Will create a string $text, which is cutted if it's too long to match between  $x1 and $2, on $img with font $font and color $color at height $y and with align to $align.

Hope it will help some people.

Sorry for my bad English.

[#16]

rush at 507magazine dot com [2006-02-28 11:54:34]

hello, I noticed that if you put a rand(3,5) it will put random sizes of font to each character put on the image. this is very useful when programming captchas for anti-spam form verification.

[#17]

julien / at / theoconcept.com [2006-02-01 15:21:44]

If you are looking for a way to generate a "CAPTCHA" image for a form verification (to verify it is not a robot), have a look at this : http://blog.theoconcept.com/static/distortion/

It gives an animated image with the parameter string, with distortion, here is an example :

http://blog.theoconcept.com/static/distortion/distortion.php

(*)  You'll need GD + Freetype support

(**) You'll need ImageMagick on the machine

[#18]

m dot onderwater at esperantoxl dot nl [2005-12-05 10:55:30]

There is a small error in the function for horizontal and vertical centering by "jurgen dot vanoosterwijck at pandora dot be"

the line

$cy = (imagesy($img)/2) - (imagefontwidth($font)/2);

should be

$cy = (imagesy($img)/2) - (imagefontheight($font)/2);

[#19]

aly at slo-igre dot net [2005-06-11 01:12:39]

There is an error in "tjpoe at cableaz dot com" 's function ImageStringWrap. Instead of

else

$string = $text;

there should be

else

$string = array($text);

for function to work for strings with only one word. Otherwise it works like a charm, thanks.

[#20]

tjpoe at cableaz dot com [2005-05-27 19:48:15]

i modified the centering functions and created this which centers each word on it's own line. You can adjust the spacing with the $valign var. currently no implimentation if text is too large for image. strings are tokenized by space, but can obviously be changed.

function ImageStringWrap($image, $font, $text, $color)

{

$fontwidth = ImageFontWidth($font);

$fontheight = ImageFontHeight($font);

$words= str_word_count($text);

if ($words > 1){

$string=array(strtok($text,' '));

for ($i = 1 ; $i <= $words ; $i++){

$string=array_merge($string,array($i=>strtok(' ')));

}

}

else

$string=$text;

$vspace=4;

$y=((imagesy($image)-($fontheight*$words)-($words*$vspace))/2);

foreach($string as $st){

$x=((imagesx($image)-($fontwidth * strlen($st)))/2);

ImageString($image,$font,$x,$y,$st,$color);

$y+=($fontheight+$vspace);

}

}

hope this is helpful

[#21]

bpgordon at gmail dot com [2005-05-23 16:04:12]

This code produces a png image of the text within the query. It autofits to the length of the string.

Usage: http://yoursite.com/text.php?abcdefg+hijk

Use + to produce a space in the image. The + can be excaped with a carat (^). Most other symbols work fine in the query string, like the ?.

header("Content-type: image/png");$string=$_ENV["QUERY_STRING"];$md5=md5($string);//just so we don't convert valid text into a +$string=str_replace("^+",$md5,$string);//replaces ^+ with long, unnatural string$string=str_replace("+"," ",$string);//replaces + with space$string=str_replace($md5,"+",$string);//replaces the long, unnatural string with +$width=imagefontwidth($font) *strlen($string);$height=imagefontheight($font);$image= @imagecreate($width+2,$height+2);$black=imagecolorallocate($image,0,0,0);//background$white=imagecolorallocate($image,255,255,255);imagestring($image,2,1,1,$string,$white);imagepng($image);imagedestroy($image);?>

[#22]

jurgen dot vanoosterwijck at pandora dot be [2005-05-12 10:52:58]

Based on the previous example, here's how to center a string both horizontally and vertically...

while (strlen($text) *imagefontwidth($font) >imagesx($img)) {

if ($font>1) {$font--; }

else { break; }

}$cy= (imagesy($img)/2) - (imagefontwidth($font)/2);imagestring($img,$font,imagesx($img) /2-strlen($text) *imagefontwidth($font) /2,$cy,$text,$color);

}?>

[#23]

shadikka at gmail dot com [2005-03-26 11:49:10]

My version of the centered string, it decreases the font number (since I've noticed smaller numbers are smaller fonts) until 1 if the string won't fit. Then it will give up.

while (strlen($text) *imagefontwidth($font) >imagesx($img)) {

if ($font>1) {$font--; }

else { break; }

}imagestring($img,$font,imagesx($img) /2-strlen($text) *imagefontwidth($font) /2,$cy,$text,$color);

}?>

[#24]

webmaster at acdrifter dot com [2005-02-28 20:08:52]

If you are looking to center the text, use the following function; I'm not promising perfection...

function imagecenteredstring ( &$img, $font, $xMin, $xMax, $y, $str, $col ) {

$textWidth = imagefontwidth( $font ) * strlen( $str );

$xLoc = ( $xMax - $xMin - $textWidth ) / 2 + $xMin + $font;

imagestring( $img, $font, $xLoc, $y, $str, $col );

}

[#25]

cesargus at yahoo dot com [2004-11-17 10:27:03]

//simple hello world

header("Content-type: image/png");$img_handle=ImageCreate(200,20) or die ("Cannot Create image");$back_color=ImageColorAllocate($img_handle,0,10,10);$txt_color=ImageColorAllocate($img_handle,235,235,51);ImageString($img_handle,10,25,5,"Hello world!",$txt_color);ImagePng($img_handle);?>

[#26]

brooks dot boyd at gmail dot com [2004-10-13 12:35:07]

Drawing a string as an image is a handy way to disguise an eMail address so spam sniffers can't get it as easily. The only catch to creating a dynamic image with your eMail in it is the eMail to be displayed must be passed via the query string to enable static HTML to use it. So, the eMail must be encrypted slightly in order to not defeat the purpose of not typing your eMail address outright. I wrote the following script to do so:

Save the following as email.php

for ($i=0;$i<=strlen($msg);$i++) {$final.=substr($msg,strlen($msg)-$i,1);

}$msg=$final;$char_width=8;$char_height=17;$padding=3;$width=$padding*2+strlen($msg)*$char_width;$height= +$padding*2+$char_height;$im=imagecreatetruecolor($width,$height);imagealphablending($im,FALSE);imagesavealpha($im,TRUE);$bg=imagecolorallocatealpha($im,255,255,0,100);$text=imagecolorallocatealpha($im,0,0,0,0);imagefilledrectangle($im,0,0,$width,$height,$bg);# Make transparentimagestring($im,4,$padding,$padding,$msg,$text);

} else {$im=imagecreatetruecolor(1,1);imagealphablending($im,FALSE);imagesavealpha($im,TRUE);$bg=imagecolorallocatealpha($im,255,0,0,125);imagefilledrectangle($im,0,0,1,1,$bg);# Make transparent}header('Content-type: image/jpg');imagepng($im);imagedestroy($im);?>

If the script is called without an eMail address, it outputs a 2x2 transparent image.

To call the script to generate the eMail "user@home.com", the HTML tag would be:

To 'encrypt' the eMail address to pass to the script, write the address backwards and replace "." with "[dot]" and "@" with "[at]". It's not the most ironclad protection, but it thwarts most casual eMail sniffers.

[#27]

php dot net at mvoncken dot nl [2003-02-14 14:18:42]

A simple example:

To make one line of text fit in the image.

header("Content-type: image/png");$string="spam@mvoncken.nl";$font=4;$width=ImageFontWidth($font) *strlen($string);$height=ImageFontHeight($font);$im= @imagecreate($width,$height);$background_color=imagecolorallocate($im,255,255,255);//white background$text_color=imagecolorallocate($im,0,0,0);//black textimagestring($im,$font,0,0,$string,$text_color);imagepng($im);?>

I use something like this for spamprotection of my visitors (pass userid as an url-parameter for this php)

[#28]

aholmes84 at hotmail dot com [2002-11-08 11:25:06]

When setting the font, any integer less than 1 defaults to 1, and any integer greater than 5 defaults to 5.

[#29]

deejay_world at yahoo dot com [2002-06-10 19:25:28]

Width ImageString, the strings you draw are not automatically wrapped width the edge of the image. You may use this function to automatically wrap them:

function ImageStringWrap($image, $font, $x, $y, $text, $color, $maxwidth)

{

$fontwidth = ImageFontWidth($font);

$fontheight = ImageFontHeight($font);

if ($maxwidth != NULL) {

$maxcharsperline = floor($maxwidth / $fontwidth);

$text = wordwrap($text, $maxcharsperline, "\n", 1);

}

$lines = explode("\n", $text);

while (list($numl, $line) = each($lines)) {

ImageString($image, $font, $x, $y, $line, $color);

$y += $fontheight;

}

}

So, in particular, if you want to wrap a text with the edge of the Image, you may do:

ImageStringWrap($img, $font, 0, $y, $text, $color, ImageSX($img) );

[#30]

bob dot brown at opus dot co dot nz [2002-04-02 15:59:44]

If you find that you are getting two characters on the end of your imageString that look like a Y and an upside down L then they're probably representations of CR/LF.  Try trim()ing the string before outputting it.  (I was sooo sure this was a bug )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值