Наложить изображение с текстом и преобразовать в изображение - PullRequest
4 голосов
/ 27 сентября 2011

Я хочу добавить текст в JPG, создавая новое изображение.

На сервере уже будет файл image_1.jpg, и я хочу взять предоставленную пользователем копию и поместить ее поверх image_1.jpg, создав новое изображение, которое объединит копию и исходное изображение в новый растеризованный jpg

Я знаю, что вы можете использовать GD Libraries в php для растеризации копии, но можете ли вы наложить ее на слой? Мой сайт написан на PHP, но я открыт для использования сторонних плагинов.

ОТВЕТ: (СТАРЫЙ ПОСТ), но что мне нужно http://blog.rafaeldohms.com.br/2008/02/12/adding-text-to-images-in-real-time-with-php/

1 Ответ

6 голосов
/ 28 сентября 2011

Используя GD и Freetype2, если оба установлены, вы можете добавить текст в JPEG, выполнив следующие шаги.

  1. создать ресурс изображения из файла, используя imagecreatefromjpeg()

  2. добавить текст к этому изображению с помощью библиотеки Freetype2 через функцию imagefttext() (обратите внимание, что вы также можете использовать функцию imagettftext(), если у вас есть только Freetype установлен и не Freetype2).

  3. сохранить измененное изображение, используя imagejpeg()

Пример:

[Я буквально только что набрал это в браузере, никогда не запускал его - поэтому, если он нуждается в поправках, извинения.]

/**
 * Annotate an image with text using the GD2 and Freetype2 libraries
 *
 * @author Orbling@StackOverflow
 *
 * @param string $sourceFileName Source image path
 * @param string $destinationFileName Destination image path
 * @param string $text Text to use for annotation
 * @param string $font Font definition file path
 * @param float $fontSize Point size of text
 * @param array $fontColour Font colour definition, expects
                            array('r' => #, 'g' => #, 'b' => #),
                            defaults to black
 * @param int $x x-coordinate of text annotation
 * @param int $y y-coordinate of text annotation
 * @param float $rotation Angle of rotation for text annotation,
                          in degrees, anticlockwise from left-to-right
 * @param int $outputQuality JPEG quality for output image
 *
 * @return bool Success status 
 */
function imageannotate($sourceFileName, $destinationFileName,
                       $text, $font, $fontSize, array $fontColour = NULL,
                       $x, $y, $rotation = 0, $outputQuality = 90) {
    $image = @imagecreatefromjpeg($sourceFileName);

    if ($image === false) {
        return false;
    }

    if (is_array($fontColour) && array_key_exists('r', $fontColour)
                              && array_key_exists('g', $fontColour)
                              && array_key_exists('b', $fontColour)) {
        $colour = imagecolorallocate($image, $fontColour['r'],
                                             $fontColour['g'],
                                             $fontColour['b']);

        if ($colour === false) {
            return false;
        }
    } else {
        $colour = @imagecolorallocate($image, 0, 0, 0);
    }

    if (@imagefttext($image, $fontSize, $rotation,
                     $x, $y, $colour, $font, $text) === false) {
        return false;
    }

    return @imagejpeg($image, $destinationFileName, $outputQuality);
}

NB. Для отладки я бы удалил символы @.

...