Tạo image text và font chữ với PHP GD

php-gd-image-and-text
Share Button

Php không chỉ giới hạn trong việc tạo ra HTML. Nó còn có thể được dùng để tạo ra các tập tin hình ảnh với 1 loạt định dạng khác nhau.  Gần đây tôi đã làm việc trong 1 một dự án nhỏ mà chúng tôi đã có để tạo ra một hình ảnh cho người sử dụng và bao gồm họ tên của họ trong đó. Với Php, mọi thứ trở nên dễ dàng hơn. Phần code dưới đây là sẽ  giải thích làm thế nào để sử dụng thư viện hình ảnh PHP GD.

$fontname = 'font/Coke4U.ttf';
// controls the spacing between text
$i = 30;
//JPG image quality 0-100
$quality = 90;
 
function create_image($user) {
    global $fontname;
    global $quality;
    $file = "covers/" . md5($user[0]['name'] . $user[1]['name'] . $user[2]['name']) . ".jpg";
 
    // if the file already exists dont create it again just serve up the original  
    //if (!file_exists($file)) {   
    // define the base image that we lay our text on
    $im = imagecreatefromjpeg("pass.jpg");
 
    // setup the text colours
    $color['grey'] = imagecolorallocate($im, 54, 56, 60);
    $color['green'] = imagecolorallocate($im, 55, 189, 102);
 
    // this defines the starting height for the text block
    $y = imagesy($im) - $height - 365;
 
    // loop through the array and write the text   
    foreach ($user as $value) {
        // center the text in our image - returns the x value
        $x = center_text($value['name'], $value['font-size']);
        imagettftext($im, $value['font-size'], 0, $x, $y + $i, $color[$value['color']], $fontname, $value['name']);
        // add 32px to the line height for the next text block
        $i = $i + 32;
    }
    // create the image
    imagejpeg($im, $file, $quality);
    imagedestroy($im);   
    return $file;
}
 
function center_text($string, $font_size) {
    global $fontname;
 
    $image_width = 800;
    $dimensions = imagettfbbox($font_size, 0, $fontname, $string);
    return ceil(($image_width - $dimensions[4]) / 2);
}
 
$user = array(
    array(
        'name' => 'Thế Giới PHP',
        'font-size' => '27',
        'color' => 'grey'),
    array(
        'name' => 'Mã nguồn Php',
        'font-size' => '16',
        'color' => 'grey'),
    array(
        'name' => 'info@thegioiphp.com',
        'font-size' => '13',
        'color' => 'green'
    )
);
 
// run the script to create the image
$filename = create_image($user);

Tôi đã tạo ra hai chức năng để làm cho nó đơn giản trong hiển thị. Để dễ dàng chạy đoạn mã trên, ta sẽ nhập mảng dữ liệu người dùng cho các chức năng và nó sẽ lưu hình ảnh mới trong thư mục 'cover' trên máy chủ của bạn. Hàm trả về địa chỉ tập tin, do đó bạn chỉ cần Echo nó vào một thẻ hình ảnh như hình dưới đây.

 

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *