GD2, TrueType fonts, Greek text -> Provlima

DJ Art djart at linux.gr
Mon Jan 20 02:32:13 EET 2003


On Monday 20 January 2003 02:06, Nikos Zounis wrote:
> Exw egkatastisei tin GD2 me freetype ipostirixi,
> kai ola einai entaxei, diladi mporw apo tin GD
> na deixw keimeno xrisimopoiontas true type
> grammatoseires.
>
> To provlima einai oti deixnei me kinezika tous
> ellinikous xaraktires.
>
> Yparxei tropos na mporo na xrisimopoiw me tin
> entoli ImageTTFText oxi mono agglika grammata
> alla kai ellinika, i akoma kalutera, kai
> opoiadipote alli glwssa ipostirizetai apo tin
> true type grammatoseira ?

το κλειδί στην συγκεκριμένη υπόθεση είναι να χρησιμοποιήσεις UTF-8.

Δηλαδή, έχουμε ας πούμε το textgd.c κάπως έτσι:

/* Compile this program using the following command:
gcc -o textgd textgd.c iconv_string.c -liconv -lgd -lpng -lttf
*/

#include <gd.h>
#include <gdfontl.h>
#include <stdio.h>
#include <string.h>
#include "iconv_string.h"

int main() {

	gdImagePtr im;

	FILE *pngout;
	int black;
	int white;
	int brect[8];
	int x,y;
	char *err;

	double sz = 40.;
	char *f = "/usr/X11R6/lib/X11/fonts/truetype/verdana.ttf";

	const char* string = "ελληνικά";
	char* s = NULL;

	iconv_string("UTF-8", "ISO-8859-7", string, string+strlen(string)+1, 
&s, NULL);

	err = gdImageStringFT(NULL,&brect[0],0,f,sz,0.,0,0,s);
	if (err) {fprintf(stderr,err); return 1;}

	x = brect[2]-brect[6] + 6;
	y = brect[3]-brect[7] + 6;
	im = gdImageCreate(x,y);

	black = gdImageColorAllocate(im, 0, 0, 0);

	white = gdImageColorAllocate(im, 255, 255, 255);

	x = 3 - brect[6];
	y = 3 - brect[7];
	err = gdImageStringFT(im,&brect[0],white,f,sz,0.0,x,y,s);
	if (err) {fprintf(stderr,err); return 1;}

	pngout = fopen("djtest.png", "wb");

	gdImagePng(im, pngout);

	fclose(pngout);

	gdImageDestroy(im);
}


το συγκεκριμένο προγραμματάκι χρησιμοποιεί το iconv για να μετατρέψει το 

const char* string = "ελληνικά";

σε UTF-8 encofing. Ας πούμε ότι το αρχείο είναι edited σε 8859-7 
encoding.

έχεις πολλές επιλογές:

1) Το χρησιμοποιείς το παραπάνω έτσι όπως είναι. Τα iconv_string.c και 
iconv_string.h θα τα βρείς στο source tarball του iconv, μέσα σε ένα 
φάκελο. (δεν θυμάμαι τώρα πως λέγεται ο φάκελος. είτε contrib, είτε 
extras, είτε tools, κάπως έτσι).

2) Δεν χρησιμοποιείς iconv, αλλά κάνεις edit το .c αρχείο με UTF-8 
editor.

3) Δεν χρησιμοποιείς iconv και γράφεις ένα ένα γράμμα με escape 
sequence. π.χ.:

const char* string = "&320;&759;&758;";

κλπ κλπ ...

τώρα βέβαια, εγώ δεν χρησιμοποιήσα την function που ήθελες και το 
παραπάνω προγραμματάκι το είχα φτιάξει με gd 1.8.4. Αλλά νομίζω πως 
κάτι τέτοιο θα χρειαστείς να κάνεις και τώρα.


-- 
Kyritsis Athanasios <djart at hellug.gr>

- What's your ONE purpose in life ?
- To explode, of course! ;-)




More information about the Linux-greek-users mailing list