Upload and Watermark(Text) Image using Codeigniter


This tutorial will show you how to upload and watermark image using Codeigniter. CodeIgniter’s File Uploading Class permits files to be uploaded. Codeigniter’s Image Library class allows us to process images, such as, crop, resize, rotate, watermark etc. You can set various preferences, restricting the type and size of the files.

So here we will upload the image first and then watermark the image. We will use here GD2 library for watermarking image. Here we will see example on text watermark.

Recommended Reading: Upload and Watermark(Overlay) Image using Codeigniter.

Types of Watermarking

There are two types of watermarking that you can use:

Text Watermarking

The watermark message will be generated using text, either with a True Type font that you specify, or using the native text output that the GD2 library supports. If you use the True Type version your GD2 installation must be compiled with True Type support (most are, but not all).

Overlay Watermarking

The watermark message will be generated by overlaying an image (usually a transparent PNG or GIF) containing your watermark over the source image.


Apache 2.4, PHP 7.3.5, Codeigniter 3.1.10

How to enable GD2 library for PHP in Windows

Creating Project Directory

We need to first create our root project directory in order to implement the upload and watermark image using Codeigniter.

It’s assumed that you have setup Apache 2.4, PHP 7.3.5 and Codeigniter 3.1.10 in Windows system.

Next we will create a project root directory called codeIgniter-3.1.10-text-watermark-image under the Apache server’s htdocs folder.

Now move all the directories and files from Codeigniter 3.1.10 framework into  codeIgniter-3.1.10-text-watermark-image directory.

We may not mention the project root directory in subsequent sections and we will assume that we are talking with respect to the project root directory.

Autoload Configuration

We need some configurations, such as, auto-loading for helpers to avoid loading every time we need to use.

$autoload['helper'] = array('html', 'url', 'file');

Creating Controller Class

Create a controller file ImageWatermark.php under application/controllers with the following source code.

The below controller class handles request and response for clients.

We define here method for performing upload and watermark operation.

The controller class has one method called index() that uploads the image, loads the GD2 & watermarks the image with the defined configurations in image_lib and sends to the view file.

We perform validations on input fields while uploading and watermarking image.

If you prefer not to set preferences using method $this->load->library('image_lib', $config), you can instead put them into a config file.

Simply create a new file called image_lib.php, add the $config array in that file. Then save the file in config/image_lib.php and it will be used automatically.

The below class uses default font from Operating System. If you want to use custom font then you can uncomment line $config['wm_font_path'] = APPPATH . 'ALGERIA.TTF'; to use this font or you may use different font.


defined('BASEPATH') OR exit('No direct script access allowed');

 * Description of ImageWatermark
 * @author https://roytuts.com
class ImageWatermark extends CI_Controller {

    //variable for storing error message
    private $error;
    //variable for storing success message
    private $success;

    function __construct() {
        //load this to validate the inputs in upload form

    //appends all error messages
    private function handle_error($err) {
        $this->error .= nl2br($err . "\n");

    //appends all success messages
    private function handle_success($succ) {
        $this->success .= nl2br($succ . "\n");

    public function index() {
        if ($this->input->post('image_watermark')) {
            //set preferences
            //file upload destination
            $upload_path = './upload/';
            $config['upload_path'] = $upload_path;
            //allowed file types. * means all types
            $config['allowed_types'] = 'jpg|png|gif';
            //allowed max file size. 0 means unlimited file size
            $config['max_size'] = '0';
            //max file name size
            $config['max_filename'] = '255';
            //whether file name should be encrypted or not
            $config['encrypt_name'] = TRUE;
            //store image info once uploaded
            $image_data = array();
            //check for errors
            $is_file_error = FALSE;
            //check if file was selected for upload
            if (!$_FILES) {
                $is_file_error = TRUE;
                $this->handle_error('Select an image file.');
            //if file was selected then proceed to upload
            if (!$is_file_error) {
                //load the preferences
                $this->load->library('upload', $config);
                //check file successfully uploaded. 'image_name' is the name of the input
                if (!$this->upload->do_upload('image_name')) {
                    //if file upload failed then catch the errors
                    $is_file_error = TRUE;
                } else {
                    //store the file info
                    $image_data = $this->upload->data();
                    $config['image_library'] = 'gd2'; //default value
                    $config['source_image'] = $image_data['full_path']; //get original image
                    $config['wm_text'] = 'Copyright 2019, roytuts.com';
                    $config['wm_type'] = 'text';
                    //$config['wm_font_path'] = APPPATH . 'ALGERIA.TTF';
                    //$config['wm_font_size'] = '18';
                    $config['wm_font_color'] = '#FF7433';
                    $config['wm_vrt_alignment'] = 'middle';
                    $config['wm_hor_alignment'] = 'left';
                    $config['wm_padding'] = '20';
                    $this->load->library('image_lib', $config);
                    if (!$this->image_lib->watermark()) {
            // There were errors, we have to delete the uploaded image
            if ($is_file_error) {
                if ($image_data) {
                    $file = $upload_path . $image_data['file_name'];
                    if (file_exists($file)) {
            } else {
                $data['watermark_img'] = $upload_path . $image_data['file_name'];
                $this->handle_success('Image was successfully uploaded to direcoty <strong>' . $upload_path . '</strong> and watermarked.');

        //load the error and success messages
        $data['errors'] = $this->error;
        $data['success'] = $this->success;
        //load the view along with data
        $this->load->view('watermark-text', $data);


Creating View Files

We will create few view files to perform our watermark operation on image.

Create a view file called watermark-text.php under application/views which will be used for uploading image and displaying the watermarked image.

This file defines a form for uploading image file and shows validations errors or success messages based on the criteria.

defined('BASEPATH') OR exit('No direct script access allowed');
<!DOCTYPE html>
        <meta charset="UTF-8">
        <title>Codeigniter Image Watermark(Text)</title>
        <style type="text/css">

            ::selection { background-color: #E13300; color: white; }
            ::-moz-selection { background-color: #E13300; color: white; }

            body {
                background-color: #fff;
                margin: 40px;
                font: 13px/20px normal Helvetica, Arial, sans-serif;
                color: #4F5155;

            #body {
                margin: 0 15px 0 15px;

            #container {
                margin: auto;
				width: 800px;
                border: 1px solid #D0D0D0;
                box-shadow: 0 0 8px #D0D0D0;

            .error {
                color: #E13300;

            .success {
                color: darkgreen;
        <div id="container">
            <h1>CodeIgniter Image Watermark(Text)</h1>

            <div id="body">
                <p>Select an image file to watermark</p>
                if (isset($success) && strlen($success)) {
                    echo '<div class="success">';
                    echo '<p>' . $success . '</p>';
                    echo '</div>';
                if (isset($errors) && strlen($errors)) {
                    echo '<div class="error">';
                    echo '<p>' . $errors . '</p>';
                    echo '</div>';
                if (validation_errors()) {
                    echo validation_errors('<div class="error">', '</div>');
                if (isset($watermark_img)) {
                    echo img($watermark_img);
                $attributes = array('name' => 'image_upload_form', 'id' => 'image_upload_form');
                echo form_open_multipart($this->uri->uri_string(), $attributes);
                <p><input name="image_name" id="image_name" readonly="readonly" type="file" /></p>
                <p><input name="image_watermark" value="Upload Image" type="submit" /></p>
                echo form_close();


Configuring Route

Now modify application/config/routes.php file for pointing the default controller class.

$route['default_controller'] = 'imagewatermark';

Testing the Application

Home Page

Now if everything is fine run the application by hitting the URL http://[::1]/codeIgniter-3.1.10-text-watermark-image/index.php, you will see below output in the browser.

upload and watermark image using codeigniter

Uploaded and Watermarked Image

Now browse and select an image file, the file will be uploaded to application/upload directory with watermarked and the watermarked image will be displayed on browser.

Make sure upload directory exists under project root directory.

upload and watermarked using codeigniter

Source Code

download source code

Thanks for reading.

Leave a Comment