ConFoo 2025

imageloadfont

(PHP 4, PHP 5, PHP 7, PHP 8)

imageloadfontCargar una nueva fuente

Descripción

imageloadfont(string $file): int

imageloadfont() carga un mapa de bits definido por el usuario y devuelve su identificador.

Parámetros

file

El formato del archivo de fuente actualmente es binario y dependiente de la arquitectura. Esto significa que debería generar los archivos de fuente en el mismo tipo de CPU de la máquina donde se está ejecutando PHP.

Formato de archivo de fuente
posición de byte tipo descripción
byte 0-3 int número de caracteres en la fuente
byte 4-7 int valor del primer carácter de la fuente (a menudo 32 para el espacio)
byte 8-11 int ancho de píxel de cada carácter
byte 12-15 int alto de píxel de cada carácter
byte 16- char matriz con la información de los caracteres, un byte por píxel en cada carácter, para un total de (ncars*ancho*alto) bytes.

Valores devueltos

El identificador de fuente que es siempre mayor que 5 para evitar conflictos con fuentes incluidas, o false si se produjeron errores.

Ejemplos

Ejemplo #1 Ejemplo de uso de imageloadfont()

<?php
// Crear una nueva instancia de imagen
$im = imagecreatetruecolor(50, 20);
$negro = imagecolorallocate($im, 0, 0, 0);
$blanco = imagecolorallocate($im, 255, 255, 255);

// Hacer el fondo blanco
imagefilledrectangle($im, 0, 0, 49, 19, $blanco);

// Cargar la fuente gd y escribir 'Hola'
$fuente = imageloadfont('./04b.gdf');
imagestring($im, $fuente, 0, 0, 'Hola', $negro);

// Imprimir al navegador
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

Ver también

add a note

User Contributed Notes 3 notes

up
5
siker at norwinter dot com
19 years ago
Working under the assumption that the only 'architecture dependant' part of the font files is endianness, I wrote a quick and dirty Python script to convert between the two. It has only been tested on a single font on a single machine so don't bet your life on it working. All it does is swap the byte order of the first four ints.

#!/usr/bin/env python

f = open("myfont.gdf", "rb");
d = open("myconvertedfont.gdf", "wb");

for i in xrange(4):
b = [f.read(1) for j in xrange(4)];
b.reverse();
d.write(''.join(b));

d.write(f.read());

I successfully used this script to convert anonymous.gdf, from one of the font links below, into something useable on Mac OS X.
up
1
alex at bestgames dot ro
19 years ago
Confirmation code generation for preventing automated registrations on a website.

Function arguments are:
$code - the code that you shall random generate
$location - relative location of the image that shall be generated
$fonts_dir - relative location for the GDF fonts directory

This function will create an image with the code given by you and will save it in the directory specified with the name formed by MD5 hash of the code.

You may insert as many font types in the fonts directory as you wish, with random names.

<?php
function generate_image($code, $location, $fonts_dir)
{
$image = imagecreate(150, 60);
imagecolorallocate($image, rand(0, 100), rand(100, 150), rand(150, 250));
$fonts = scandir($fonts_dir);

$max = count($fonts) - 2;

$width = 10;
for (
$i = 0; $i <= strlen($code); $i++)
{
$textcolor = imagecolorallocate($image, 255, 255, 255);
$rand = rand(2, $max);
$font = imageloadfont($fonts_dir."/".$fonts[$rand]);

$fh = imagefontheight($font);
$fw = imagefontwidth($font);

imagechar($image, $font, $width, rand(10, 50 - $fh), $code[$i], $textcolor);
$width = $width + $fw;

}

imagejpeg($image, $location."/".md5($code).".jpg", 100);
imagedestroy($image);

return
$code;

}

?>
up
0
matthew at exanimo dot com
19 years ago
Remember - GD fonts aren't antialiased. If you're planning on using a pre-existing (TrueType) font, you may want to consider using imagettftext() instead of phillip's function.
To Top