Sunday, December 22, 2013

MongoDB: Getting Started With CRUD Operations

MongoDB is No-Sql Open Source database system which uses document as record of database.
MongoDB is designed for high performance and high accessibility.  

Document is set of field => value pair combination and store this information in form of BSON ( BSON is binary representation of JSON records) which is native data type in most of languages.

MongoDB store set of documents in the form of collection.

Now let’s see the basic operations which can be handled in MongoDB.
  •          Create
  •          Read
  •          Update
  •         Delete

Collectively called CRUD operation

Create Operation

MongoDB perform atomic create operation on single document. It adds new document to selected collection.

                 field => value,
                 field => value,
                 field => value,

Here value could be simple datatype or complex (document or array)
Create operation always add unique identifier of ObjectId data type to newly created document.

ObjectId is 12 byte BSON primarily used to maintain uniqueness in collection. Following is byte structure of ObjectId.

  • 4 byte for Unix epoch value
  • 3 byte for machine identifier
  • 2 byte for process identifier
  • 3 byte for some random value


                name : “Zainul”,
                address : "XYZ Address"

Read Operation

Read operation fetches documents from single or selected collection. It uses projection and condition to modify resulting documents.

  •     Project is used to fetch only select fields of document which help to increase read operation.
  •     Condition is used to select particular document which falls under given condition.

           { condition },
           { projection }

We can use limit and sort to limit and order resulting documents

Note:  order of resulting documents is not defined unless we provide order for documents


        { name: ‘Zainul’ },
        { name : 1, email : 1}

This command will return set of documents from user collection whose name matches with given condition and fetch only name and email.

Note: read operation always returns id unless we omit it by using query projection

Update Operation

Update operation modify existing document or even create new document. It uses update criteria to isolate documents and update action to modify values of selected documents.

           { update criteria },
           { update action },
           { update option }

Update option tells MongoDBto update multiple documents.


        { name : 'Zainul' },
        { $set : { name :  "Abedin' } }

Note:  use upsert to create a new document if that document does not exist.

Delete Operation

Delete operation remove single or multiple documents from selected collection. It uses remove criteria to identify the document which is to be removed.

     {remove criteria}

If remove criteria is not defined then it will remove all the documents.



      { name :  'Abedin' }

These basic operation will help to get started with MongoDB CRUD operation.

Thursday, December 5, 2013

How To Watermark A Photo Using PHP

Hello Friends, This blog post will help you to create a watermark image using PHP. But first let’s get introduce yourself with watermarking.

What is Watermark?
Watermark is a marker which is embedded inside image (other media). It is use to identify the ownership.

Why we need Watermarking?
Watermarking helps to maintain integrity and avoid unauthorized use for images (other media source also).

For example let’s suppose you are have image hosting website and you provide unique and beautiful images to user. If you want only authorize user should download your images then you need to provide image preview with watermarking and original image to authorized user only so that unauthorized user cannot misuse it.

Now let look at some coding stuff.

First example shows watermarking images with text, normally we use copyright text.
And second example show watermarking with watermark image.

Watermarking using text

// set water mark text
$watermark = 'watermark';

//create source image
$source_image = imagecreatefromjpeg('images/some_image.jpg');

//get image width & height position
$image_x = imagesx($source_image);
$image_y = imagesy($source_image);

$font_size = 48;  //font size

//set font for watermark text
// you can use any font 
// source
$font = 'Roboto-Light.ttf';

// create font size for watermark text
$font_size_box = imagettfbbox($font_size, 0, $font, $watermark);

// generate water text position (middle)
$image_x = ($image_x / 2) - ($font_size_box[2] / 2);
$image_y = ($image_y / 2) - ($font_size_box[5] / 2);;

//create color (white color)
$image_color = imagecolorallocate($source_image, 250, 250, 250);

// create image from combination of image + text
imagettftext($source_image, $font_size, 0, $image_x, $image_y, $image_color, $font, $watermark);

// generate water mark image
imagejpeg($source_image, 'images/watermark_image.jpg');

Watermarking using image

// watermark image
$water_mark_image = imagecreatefrompng('images/watermark.png');

// image to be watermarked
$org_image = imagecreatefromjpeg('images/some_image.jpg');

$margin = 10;

// create watermark position inside original image
// bottom right corner
$water_mark_position_x = imagesx($org_image) - imagesx($water_mark_image) - $margin;
$water_mark_position_y = imagesy($org_image) - imagesy($water_mark_image) - $margin;

// center position
//$water_mark_position_x = imagesx($org_image) / 2 - imagesx($water_mark_image) / 2;
//$water_mark_position_y = imagesy($org_image) / 2 - imagesy($water_mark_image) / 2;

// create image copy by combining original image + watermark image
imagecopy($org_image, $water_mark_image, $water_mark_position_x, $water_mark_position_y, 0, 0, imagesx($water_mark_image), imagesy($water_mark_image));

// create watermark image from image copy
imagepng($org_image, 'images/waterking_image.png');

//destroy images source

If you are providing watermark image for download purpose then it is recommended to add watermark at center position and if it is for only preview then you can add it top corner or bottom corner