Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > C и GD. Вывод текста на картинке


Автор: safari 23.3.2009, 12:37
Доброго времени суток!

Задача такая нужно вывести текст из файла в виде картинки, но текст может быть разным.
Необходимо создавать изображение размером такое, чтоб влезал весь текст, то есть нужно сделать проверку на размер или тип шрифта.
Может быть легче изменить шрифт под размер картинки?
Подскажите, плиз, куда копать и что можно посмотреть, может быть есть какие-то специальные функции.

Задачу пытаюсь решить с помощью С и GD-library на fc10.
Часть кода
Код

 /* Allocate the image: 77 pixels across by 20 pixels tall */
  im = gdImageCreate(77, 20);

  /* Allocate the color black (red, green and blue all minimum).
 *  *     Since this is the first color in a new image, it will
 *   *         be the background color. */
  black = gdImageColorAllocate(im, 0, 0, 0);

  /* Allocate the color white (red, green and blue all maximum). */
  white = gdImageColorAllocate(im, 255, 255, 255);

  gdImageString(im, gdFontLarge, 0, 0, "user=cms088", white);

    /* Open a file for writing. "wb" means "write binary", important
 *  *     under MSDOS, harmless under Unix. */
  pngout = fopen("text.png", "wb");

  /* Output the image to the disk file in PNG format. */
  gdImagePng(im, pngout);

   /* Close the file. */
  fclose(pngout);

  /* Destroy the image in memory. */
  gdImageDestroy(im);



Автор: andrew_121 23.3.2009, 12:45
Для подобной цели я использовал phgwriter (http://pngwriter.sourceforge.net/) и Freetype2 (http://freetype.sourceforge.net/index2.html) с Mingw.

Автор: safari 6.4.2009, 12:35
Спасибо за совет, задача решилась, но появилась другая проблема.
Хочу скомпилировать программку статически, но не получается, динамически всё работает. Система fc10

$ gcc -static -o text text.c -lgd -lpng -lz -ljpeg -lm
/usr/bin/ld: cannot find -lgd
collect2: выполнение ld завершилось с кодом возврата 1

gd и gd-devel стоит.

$ ldd text
    linux-gate.so.1 =>  (0x00110000)
    libgd.so.2 => /usr/lib/libgd.so.2 (0x00111000)
    libc.so.6 => /lib/libc.so.6 (0x0059a000)
    libXpm.so.4 => /usr/lib/libXpm.so.4 (0x05d78000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00774000)
    libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x06f19000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00ae9000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00a2e000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00a04000)
    libz.so.1 => /lib/libz.so.1 (0x0075e000)
    libm.so.6 => /lib/libm.so.6 (0x00710000)
    /lib/ld-linux.so.2 (0x00575000)
    libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0x008a2000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00877000)
    libdl.so.2 => /lib/libdl.so.2 (0x0073b000)
    libexpat.so.1 => /lib/libexpat.so.1 (0x009db000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00895000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x0089a000)

Подскажите, плиз в чём дело.

Автор: xvr 6.4.2009, 13:44
А libgd.a есть? Видимо нет

Автор: safari 6.4.2009, 13:53
Нет, нету, но какому пакету это библиотека должна принадлежать?
Везде пишут gd-devel, но этот пакет стоит

Автор: xvr 7.4.2009, 11:33
Цитата(safari @ 6.4.2009,  13:53)
Нет, нету, но какому пакету это библиотека должна принадлежать?

Не в курсе, ищите  smile 

Для динамической линковки применяются динамические библиотеки (*.so), для статической - статические (*.a). Это разные файлы и заменить друг друга они не могут. Так что, если какой то версии библиотек нет, то соотвевтующая линковка не пройдет  smile Обычно обе версии библиотек лежат в одном пакете, но бывают и исключения  smile 

Еще вариант - взять сорцы и построить самому  smile 

Автор: safari 7.4.2009, 11:39
Ок, спасибо, как говорил Никулин, будем искать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)