Comment to: Sohel Taslim [03-Aug-2007 06:19]
Thanks for the function which I have modified a bit. In the new version the lines have equal space between them [the g's in your example create bigger space between the lines] - set by the parameter '$Leading'.
I have used the for-loop for better performance and slimmed the rest a little :]
/**
* @name : makeImageF
*
* Function for create image from text with selected font. Justify text in image [0-Left, 1-Right, 2-Center].
*
* @param String $text : String to convert into the Image.
* @param String $font : Font name of the text. Kip font file in same folder.
* @param int $Justify : Justify text in image [0-Left, 1-Right, 2-Center].
* @param int $Leading : Space between lines.
* @param int $W : Width of the Image.
* @param int $H : Hight of the Image.
* @param int $X : x-coordinate of the text into the image.
* @param int $Y : y-coordinate of the text into the image.
* @param int $fsize : Font size of text.
* @param array $color : RGB color array for text color.
* @param array $bgcolor : RGB color array for background.
*
*/
function imagettfJustifytext[$text, $font="CENTURY.TTF", $Justify=2, $Leading=0, $W=0, $H=0, $X=0, $Y=0, $fsize=12, $color=array[0x0,0x0,0x0], $bgcolor=array[0xFF,0xFF,0xFF]]{
$angle = 0;
$_bx = imageTTFBbox[$fsize,0,$font,$text];
$s = split["[\n]+", $text]; // Array of lines
$nL = count[$s]; // Number of lines
$W = [$W==0]?abs[$_bx[2]-$_bx[0]]:$W; // If Width not initialized by programmer then it will detect and assign perfect width.
$H = [$H==0]?abs[$_bx[5]-$_bx[3]]+[$nL>1?[$nL*$Leading]:0]:$H; // If Height not initialized by programmer then it will detect and assign perfect height.
$im = @imagecreate[$W, $H]
or die["Cannot Initialize new GD image stream"];
$background_color = imagecolorallocate[$im, $bgcolor[0], $bgcolor[1], $bgcolor[2]]; // RGB color background.
$text_color = imagecolorallocate[$im, $color[0], $color[1], $color[2]]; // RGB color text.
if [$Justify == 0]{ //Justify Left
imagettftext[$im, $fsize, $angle, $X, $fsize, $text_color, $font, $text];
} else {
// Create alpha-nummeric string with all international characters - both upper- and lowercase
$alpha = range["a", "z"];
$alpha = $alpha.strtoupper[$alpha].range[0, 9];
// Use the string to determine the height of a line
$_b = imageTTFBbox[$fsize,0,$font,$alpha];
$_H = abs[$_b[5]-$_b[3]];
$__H=0;
for [$i=0; $i
1] If you want to add files to a ZIP archive but you don't know if the ZiP file exists or not, you MUST check: this changes the way you open it !.
2] you can not append multiple flags, can use only one [or none].
If the zip does not exists, open it with:
$ziph->open[$archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE]
[or a different compression method]
If the zip already exists, open it with:
$ziph->open[$archiveFile]
or
$ziph->open[$archiveFile, ZIPARCHIVE::CHECKCONS]
Example: make backup files every hour and ZIP them all in a daily ZIP archive, so you want to get only one ZIP per day, each ZIP containing 24 files:
function archivebackup[$archiveFile, $file, &$errMsg]
{
$ziph = new ZipArchive[];
if[file_exists[$archiveFile]]
{
if[$ziph->open[$archiveFile, ZIPARCHIVE::CHECKCONS] !== TRUE]
{
$errMsg = "Unable to Open $archiveFile";
return 1;
}
}
else
{
if[$ziph->open[$archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE] !== TRUE]
{
$errMsg = "Could not Create $archiveFile";
return 1;
}
}
if[!$ziph->addFile[$file]]
{
$errMsg = "error archiving $file in $archiveFile";
return 2;
}
$ziph->close[];
return 0;
}
?>