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