Upload dan Crop Image menggunakan JCrop dan CI


Inti dari tutorial ini adalah melakukan upload dan crop image. Saat seorang user mengupload sebuah image ke website kita, website akan mengupload file itu ke file server, lalu menampilkan kembali image yang di upload, setelah itu user dapat melakukan seleksi terhadap gambar yang mereka upload. Kalau teman2 adalah facebookers, saat teman2 ingin mejadikan sebuah photo yang telah diupload menjadi profile picture, pasti facebook menyediakan fungsi crop itu. Nah .., bagai mana cara mengimplementasikan hal ini kususnya menggunakan CI framework ??? mari kita selesaikan secara seksama dan dalam tempo sesingkat singkat nya.

Untuk mengimplmenetasikan hal ini kita membutuhkan CodeIngniter Framework dan JCrop, dan FireBug firefox plugin untuk debugging. Hal yang harus kita lakukan adalah membuat fitur upload, misalkan nama controllernya gallery.php dan nama view untuk upload adalah upload.php. folder view saya letakan pada direktori view/test/upload.php dan controller di controller/test/gallery.php.

fungsi index dibawah adalah untuk menampilkan view upload dan melakukan upload image ke direktori base_url()/files

class Gallery extends Controller {

	function index() {
		if(isset($_FILES['file_data'])){
			//get file name from temp direcotory
			$file 	= read_file($_FILES['file_data']['tmp_name']);
			$name 	= basename($_FILES['file_data']['name']);
			$rnd_name = get_rand_name();	//set random name to avoid the same file name
			$file_ext = find_exts($name);	//get file extension
			$file_name = $rnd_name . '.' . $file_ext; //concatenate file name to its file extension
			$folder = 'files';
			write_file('files/'.$file_name, $file);	//write the file to spesific direcotory
			$cropped_name = $this->default_thumb($folder, $rnd_name, $file_ext, 500, 500);	//generate thumbnail to expected width and height

			redirect('test/gallery/crop/' . $cropped_name);
		} else {
			$data['main_content'] = 'test/upload';
			$this->load->view('template', $data);
		}
	}
}

view untuk upload adalah sebagai berikut /view/test/upload.php

<form enctype="multipart/form-data" action="<?=site_url('test/gallery/index')?>" method="post">

	<div id="boxtop"></div><div id="boxmid">

		<div class="section">
			<span>File:</span>
			<input type="file" name="file_data" />
		</div>

	</div><div id="boxbot"></div>

	<div class="text" style="float: left;"><p>Before uploading, check out</p><p>the <a href=#>Terms of Service</a>.</p></div>
   	<div class="text" style="float: right;">

	<input type="submit" value="Upload" name="upload" class="submit" />
</div>
<br style="clear:both; height: 0px;" />

</form>

Setelah file berhasil di upload, maka controller gallery meresize image tersebut menjadi 500 px agar file yang akan di crop nantinya tidak terlalu lebar atau panjang. dengan meng invoke fungsi default_thumb($folder, $rnd_name, $ext, $height, $width) dibawah ini/

/**
* Resize the uploaded image
*
*/
function default_thumb($folder, $rnd_name, $ext, $height, $width) {

$image_path =  $folder . '/' . $rnd_name . '.' . $ext;
$image_thumb = $folder . '/' . $rnd_name . '_' . $width . '.' . $ext;

$this-&gt;load-&gt;library('image_lib');
$config['image_library']	= 'gd2';
$config['source_image']		= $image_path;
$config['new_image']		= $image_thumb;
$config['maintain_ratio']	= TRUE;
$config['height']			= $height;
$config['width']			= $width;
$this-&gt;image_lib-&gt;initialize($config);
$this-&gt;image_lib-&gt;resize();
$this-&gt;image_lib-&gt;clear();

return $rnd_name . '_' . $width . '.' . $ext;
}

Setelah file di upload dan di resize fungsi index akan meredirect fungsi itu ke fungsi crop. /controller/gallery.php/crop

function crop($path = null) {
		if( isset($_POST['submit']))
		{
			$this->load->library('image_lib');

			//set source file path and destination of file path
			$path = $this->input->post('file_name');
			$file_name = get_file_name($path);
			$src_path = 'files/' . $path;
			$des_path =  'files/' . $file_name . '_t.jpg';

			$x = $this->input->post('x');
			$y = $this->input->post('y');
			$width = $this->input->post('w');
			$height = $this->input->post('h');

			//set image library configuration
			$config['image_library']	= 'gd2';
			$config['source_image']		= $src_path;
			$config['new_image']		= $des_path;
			$config['maintain_ratio']	= FALSE;
			$config['width']			= 150;
			$config['height']			= 150;
			$config['orig_width']		= $width;
			$config['orig_height']		= $height;
			$config['x_axis']			= $x;
			$config['y_axis']			= $y;
			$this->image_lib->initialize($config);

			//process thumb and reset the original with and height
			$this->image_lib->image_process_gd('thumb', $width, $height);

			$data['cropresult'] = $des_path;
			$data['main_content'] = 'test/cropresult';
			$this->load->view('template', $data);
		} else {
			//set image size to width and height varable
			list($width, $height) =  getimagesize('files/' . $path);
			$data['orig_w'] = $width;
			$data['orig_h'] = $height;
			$data['targ_w'] = 150;		//expected thumbnail
			$data['targ_h'] = 150;
			$data['path'] = $path;

			$this->load->view('test/jcrop', $data);
		}

	}//end crop

fungsi crop akan terlebih dahulu menampilkan view untuk crop image. view/test/jcrop.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
	<title>Using the JQuery JCrop Plugin, and PHP for Image Uploads</title>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<script type="text/javascript" src="<?php echo base_url() . 'js/jquery/jquery.js'  ?>"></script>
	<script type="text/javascript" src="<?php echo base_url() . 'js/jquery/jcrop/jquery.Jcrop.pack.js' ?>"></script>
	<link rel="stylesheet" href="<?php echo base_url() . 'js/jquery/jcrop/jquery.Jcrop.css' ?>" type="text/css" />
	<script type="text/javascript">
		$(function(){
			$('#cropbox').Jcrop({
				aspectRatio: 1,
				setSelect: [0,0,<?php echo $targ_w.','.$targ_w;?>],
				onSelect: updateCoords,
				onChange: updateCoords
			});
		});

		function updateCoords(c)
		{
			showPreview(c);
			$("#x").val(c.x);
			$("#y").val(c.y);
			$("#w").val(c.w);
			$("#h").val(c.h);
		}

		function showPreview(coords)
		{
			var rx = <?php echo $targ_w;?> / coords.w;
			var ry = <?php echo $targ_h;?> / coords.h;

			$("#preview img").css({
				width: Math.round(rx*<?php echo $orig_w;?>)+'px',
				height: Math.round(ry*<?php echo $orig_h;?>)+'px',
				marginLeft:'-'+  Math.round(rx*coords.x)+'px',
				marginTop: '-'+ Math.round(ry*coords.y)+'px'
			});
		}
	</script>
	<style type="text/css">
		#preview
		{
			width: <?php echo $targ_w?>px;
			height: <?php echo $targ_h?>px;
			overflow:hidden;
		}
	</style>
	</head>

	<body>

		<h1>Jcrop Plugin Behavior</h1>
		<table>
			<tr>
				<td>
					<img src="<?php echo base_url() . 'files/' . $path ?>" id="cropbox" alt="cropbox" />

				</td>
				<td>
					Thumb Preview:
					<div id="preview">
						<img src="<?php echo base_url() . 'files/' . $path ?>" alt="thumb" />
					</div>
				</td>
			</tr>
		</table>

		<form action="<?php echo site_url() . '/test/gallery/crop' ?>" method="post">
			<p>
				<input type="text" id="file_name" name="file_name" value="<?php echo $path?>" />
				<input type="text" id="x" name="x" />
				<input type="text" id="y" name="y" />
				<input type="text" id="w" name="w" />
				<input type="text" id="h" name="h" />
				<input type="submit" id="submit" name="submit" value="Crop Imagex!" />
			</p>
		</form>
	</body>
</html>

Dimensi destination image telah aku set ukuran nya menjadi 150 x 150 px. Tampilanya seperti ini:

Disini kita telah menggunkana library JCrop agar kita dapat menyeleksi gambar sesuai dengan keninginan kita. Tapi hal yang paling penting disini adalah JCrop hanya digunakan untuk melakukan preview image yang kita seleksi dan mendapatkan kordinat(x, y) beserta tinggi dan lebar (w, h) source image, tapi ingat panjang dan lebar ini bukan panjang lebar destination image, tapi untuk source image / gambar awal yang akan dicrop.
Setelah kita seleksi gambar tersebut kita mensubmit kordinat, dimensi gambar, dan nama gambar yang akan di crop. lalu server aku melakukan crop dan resize image.

Untuk mengimplementasikan crop ini, aku melakukan sedikit kustomasi image_lib. kenapa aku buat seperti itu, karena fungsi build in image_lib code igniter hanya support crop atau resize. image_lib tidak dapat melakukan crop dan resize sekaligus, untuk itu aku lakukan sedikit perubahahn😀. perubahan yang aku lakukan terletak pada fungsi image_process_gd($action = ‘resize’, $org_w = 0, $org_h = 0).

adalah:

/**
	 * Image Process Using GD/GD2
	 *
	 * This function will resize or crop
	 *
	 * @access	public
	 * @param	string
	 * @return	bool
	 */
	function image_process_gd($action = 'resize', $org_w = 0, $org_h = 0)
	{
		$v2_override = FALSE;
		// If the target width/height match the source, AND if the new file name is not equal to the old file name
		// we'll simply make a copy of the original with the new name... assuming dynamic rendering is off.
		if ($this->dynamic_output === FALSE)
		{
			if ($this->orig_width == $this->width AND $this->orig_height == $this->height)
			{
				if ($this->source_image != $this->new_image)
				{
					if (@copy($this->full_src_path, $this->full_dst_path))
					{
						@chmod($this->full_dst_path, DIR_WRITE_MODE);
					}
				}

				return TRUE;
			}
		}

		// Let's set up our values based on the action
		if ($action == 'crop')
		{
			//  Reassign the source width/height if cropping
			$this->orig_width  = $this->width;
			$this->orig_height = $this->height;

			// GD 2.0 has a cropping bug so we'll test for it
			if ($this->gd_version() !== FALSE)
			{
				$gd_version = str_replace('0', '', $this->gd_version());
				$v2_override = ($gd_version == 2) ? TRUE : FALSE;
			}
		}
		else if ($action == 'resize')
		{
			// If resizing the x/y axis must be zero
			$this->x_axis = 0;
			$this->y_axis = 0;
		} else {
			$this->orig_width  = $org_w;
			$this->orig_height = $org_h;
		}

		//  Create the image handle
		if ( ! ($src_img = $this->image_create_gd()))
		{
			return FALSE;
		}

		//  Create The Image
		//
		//  old conditional which users report cause problems with shared GD libs who report themselves as "2.0 or greater"
		//  it appears that this is no longer the issue that it was in 2004, so we've removed it, retaining it in the comment
		//  below should that ever prove inaccurate.
		//
		//  if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor') AND $v2_override == FALSE)
		if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor'))
		{
			$create	= 'imagecreatetruecolor';
			$copy	= 'imagecopyresampled';
		}
		else
		{
			$create	= 'imagecreate';
			$copy	= 'imagecopyresized';
		}

		/*echo '<br /> Coordinate' . $this->x_axis . " x " . $this->y_axis;
		echo '<br /> Destination size' .$this->width . " x " . $this->height;
		echo '<br /> Originl Size' . $this->orig_width. " x " . $this->orig_height;*/
		$dst_img = $create($this->width, $this->height);
		$copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);

		//  Show the image
		if ($this->dynamic_output == TRUE)
		{
			$this->image_display_gd($dst_img);
		}
		else
		{
			// Or save it
			if ( ! $this->image_save_gd($dst_img))
			{
				return FALSE;
			}
		}

		//  Kill the file handles
		imagedestroy($dst_img);
		imagedestroy($src_img);

		// Set the file to 777
		@chmod($this->full_dst_path, DIR_WRITE_MODE);

		return TRUE;
	}

Hasilnya adalah:

Cukup sederhana bukan😀 ??? Sekian dulu tutorial kali ini.

Download:

  1. Source Code
  2. JCrop Lib

referensi

  1. Image Lib
  2. File Upload

24 thoughts on “Upload dan Crop Image menggunakan JCrop dan CI

  1. Angga Lingga December 29, 2009 / 3:29 am

    Master ……………..
    Salut awak bah ……..

    • adisembiring January 18, 2010 / 6:04 pm

      kw masih jauh diatasku. sogan kali awak😀

  2. ganda January 12, 2010 / 11:12 am

    cem-cem suatu project kuliat nightvision ini.😀

  3. adisembiring January 12, 2010 / 1:20 pm

    @ganda
    maksud nya apa bang ??? night vision itu template web yang aku gunakan buat experiment CI😀

  4. ganda January 13, 2010 / 6:09 am

    kiran project lepas, kalau ada proyek, bagi2 ya.😀 hahahaha..

    • adisembiring January 18, 2010 / 6:05 pm

      apalah awak neh …, tak ada koneksi. dari kw lah bro, bagi2 dulu ke kita. kenya banyak freelance mu😀

      • Angga Lingga January 19, 2010 / 2:30 am

        Sok kali si Adi ini percuma dapat proyek Enterprise kw hahaha …

      • ganda January 27, 2010 / 6:54 am

        saat ini lagi kosong, kemaren-kemaren pas bulan2 KP baru banyak request.😀 Mungkin ntar bulan2 kp baru kebanjiran. hehehehe….

      • ganda January 27, 2010 / 6:57 am

        @angga,
        bukannya kau juga dapat proyek skala super enterprise ga? itu tuh, yang buat sistem informasi jus. Kudengar, ada simulasinya gitu. Misalnya mangga + durian, ntar keluar jusnya kayak apa dan rasanya kayak apa. Lengkap dengan informasi gizi, jumlah jus yang dihasilkan(baik dalam ukuran gelas maupun cc), dan stabilitas ramuan jus tersebut ke berbagai tipe perut, seperti perutmu yang sering tidak kompatibel dengan beberapa ramuan jus. Lengkap juga dengan harganya klo gak salah, diskon dan stock buah. bahkan bisa pesan jus, via confrence klo gak salah ya. ntar struk pembayaran di kirim ke email kan? hahahahaha

  5. Khantry February 25, 2010 / 12:24 am

    Sumpah.. matep banget codingnya..
    ijin bookark untuk belajar.. makasih ya atas sharednya, tuhan pasti membalas berlipat2 kebaikan untuk hambanya yang mau berbagi ilmu.. makasih..
    hihihihi..

  6. cyberfly March 29, 2010 / 3:14 pm

    hi, thanks for the tutorial there. very good. i must admit you are the only person in the world that write the tutorial on how to use jcrop with CI (after hours of googling)

  7. Daduts May 20, 2010 / 2:30 am

    Muanteeeppp… abieezzz….. siiiip lah … maju terus yapz…

  8. IKA July 7, 2010 / 2:55 am

    Keren nih kodingan, lam kenal yah…:)

  9. dawil May 3, 2011 / 4:52 am

    gan, databasenyaa mana ????
    database yang source codenyaa

    • adisembiring May 3, 2011 / 4:55 am

      Ini ga pake database gan …
      kan cuma crop dan nampilin crop result doang.

      kalo mau di save database di modif aja method cropnya, ntar insert ke database malalui model
      link source codenya ada di article😀

      • Akbar December 18, 2012 / 3:02 am

        mana gan source code yang insert ke database melalui model

  10. Mavve February 12, 2013 / 2:09 pm

    Message: getimagesize(): Read error! how do i solve it

  11. Passing by your blog again and I have to say you still have your touch!

    This post describes everything, I don’t have to take a
    look at other people’s page to comprehend it more.

    You said everything I would like to know. Cheers!

  12. Willy Lui April 25, 2013 / 9:48 am

    Mhm,, itu hanya untuk bahasa php doank mas?? kalo jcrop’a di pake untuk bahasa pemograman java gimana? please help me..

  13. Marshall June 21, 2014 / 2:44 pm

    These are truly fantastic iddeas in on the topic oof blogging.
    You have touched some pleasant faxtors here. Any way keep up wrinting.

  14. sarkari naukri uttarakhand July 12, 2014 / 7:26 am

    I’ve been surfing online more than three hours today, yet I never found any
    interesting article like yours. It’s pretty worth enough for me.
    Personally, if all webmasters and bloggers made good content as you did, the web will be much more useful than ever
    before.|
    I could not refrain from commenting. Exceptionally
    well written!|
    I’ll right away grasp your rss feed as I can’t in finding your email subscription link or newsletter service.
    Do you’ve any? Kindly permit me realize so that I may subscribe.

    Thanks.|
    It is perfect time to make some plans for the future and it is time
    to be happy. I have read this post and if I could I desire to suggest you some interesting
    things or suggestions. Maybe you can write next articles referring to this article.
    I desire to read more things about it!|
    It is perfect time to make some plans for the long run and it’s time to be happy.
    I have learn this publish and if I may just I want to recommend you some attention-grabbing things or suggestions.

    Perhaps you could write subsequent articles relating
    to this article. I want to learn even more issues approximately it!|
    I’ve been surfing online more than 3 hours today, but I never discovered any attention-grabbing article like yours.

    It is lovely value enough for me. Personally, if all web owners and
    bloggers made just right content material as you probably did, the internet can be
    much more useful than ever before.|
    Ahaa, its nice dialogue regarding this article here at this website, I have
    read all that, so at this time me also commenting
    here.|
    I am sure this article has touched all the internet visitors, its really really fastidious
    article on building up new website.|
    Wow, this piece of writing is fastidious, my younger sister
    is analyzing these things, therefore I am going to tell her.|
    Saved as a favorite, I really like your site!|
    Way cool! Some extremely valid points! I appreciate you writing this post and the rest of the site
    is very good.|
    Hi, I do believe this is an excellent web site.
    I stumbledupon it😉 I will revisit once again since i have saved as a favorite it.
    Money and freedom is the best way to change, may you be rich and
    continue to guide others.|
    Woah! I’m really loving the template/theme of this site.
    It’s simple, yet effective. A lot of times it’s challenging to get that “perfect balance” between superb usability and appearance.
    I must say that you’ve done a awesome job with this.
    Additionally, the blog loads very quick for me on Opera.

    Exceptional Blog!|
    These are actually enormous ideas in on the topic of blogging.
    You have touched some good things here. Any way keep up wrinting.|
    I really like what you guys are usually up too. This sort of clever work and reporting!
    Keep up the good works guys I’ve you guys to my own blogroll.|
    Hello! Someone in my Facebook group shared this website with us so I came to give it a look.
    I’m definitely enjoying the information. I’m book-marking and will be tweeting this to my followers!
    Superb blog and terrific style and design.|
    I enjoy what you guys tend to be up too. This kind of clever work
    and reporting! Keep up the amazing works guys
    I’ve added you guys to my blogroll.|
    Hi would you mind sharing which blog platform you’re working with?
    I’m going to start my own blog in the near future
    but I’m having a tough time choosing between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your design seems different then most
    blogs and I’m looking for something completely unique.

    P.S Sorry for getting off-topic but I had to ask!|
    Hey there would you mind letting me know which hosting company
    you’re working with? I’ve loaded your blog in 3 completely
    different browsers and I must say this blog loads a lot quicker then most.

    Can you suggest a good internet hosting provider at a reasonable price?

    Thank you, I appreciate it!|
    I love it when individuals get together and share views.

    Great website, continue the good work!|
    Thank you for the good writeup. It in fact was a amusement
    account it. Look advanced to more added agreeable from
    you! However, how can we communicate?|
    Hello just wanted to give you a quick heads up. The text in your post seem to be
    running off the screen in Firefox. I’m not sure if this is a formatting issue or something to do with internet browser compatibility but I figured I’d post to let you know.
    The style and design look great though! Hope you get the problem fixed soon. Thanks|
    This is a topic that’s close to my heart… Cheers!
    Where are your contact details though?|
    It’s very effortless to find out any topic on web as compared to books, as I found this piece of writing at this website.|
    Does your blog have a contact page? I’m having problems locating it but, I’d like to shoot you an e-mail.

    I’ve got some recommendations for your blog you might be interested in hearing.
    Either way, great blog and I look forward to seeing it expand over time.|
    Hey there! I’ve been reading your blog for a long time now and finally got the
    bravery to go ahead and give you a shout out from Humble Tx!
    Just wanted to say keep up the fantastic job!|
    Greetings from Florida! I’m bored to tears at work so I decided to check out
    your website on my iphone during lunch break. I enjoy the knowledge you present here and can’t wait to take
    a look when I get home. I’m shocked at how quick your blog loaded on my cell phone ..
    I’m not even using WIFI, just 3G .. Anyhow, good blog!|
    Its such as you learn my thoughts! You appear to understand so much about this,
    such as you wrote the ebook in it or something. I feel that you just can do with a few
    % to pressure the message home a little bit, however other than that, that is great blog.
    A fantastic read. I will definitely be back.|
    I visited many blogs but the audio quality for
    audio songs existing at this site is truly excellent.|
    Hi, i read your blog from time to time and i own a similar one and i was
    just curious if you get a lot of spam remarks? If so how do you prevent it, any plugin or anything
    you can suggest? I get so much lately it’s driving me insane so any support is very much appreciated.|
    Greetings! Very useful advice within this post! It’s the little changes that make the largest
    changes. Thanks a lot for sharing!|
    I absolutely love your site.. Pleasant colors & theme.
    Did you make this website yourself? Please reply back as I’m planning to create my own personal website and want to know where you got this from or what the theme is called.

    Thank you!|
    Howdy! This blog post could not be written much better!
    Looking through this post reminds me of my previous roommate!
    He continually kept talking about this. I’ll forward this information to him.

    Pretty sure he’ll have a great read. Many thanks for sharing!|
    Incredible! This blog looks exactly like my old one! It’s on a entirely different subject but
    it has pretty much the same page layout and design. Excellent choice
    of colors!|
    There is definately a lot to learn about this issue.
    I like all the points you have made.|
    You have made some good points there. I checked on the web for more information about the
    issue and found most people will go along with your views on this
    site.|
    Hello, I log on to your blogs like every week.

    Your writing style is witty, keep it up!|
    I simply could not go away your site before suggesting that I extremely loved the usual info an individual supply in your visitors?

    Is going to be back often in order to check out new
    posts|
    I want to to thank you for this good read!! I absolutely loved every little bit of it.
    I have got you saved as a favorite to check out new stuff you post…|
    Hi there, just wanted to mention, I enjoyed this article.
    It was funny. Keep on posting!|
    Hello, I enjoy reading all of your article.
    I wanted to write a little comment to support you.|
    I always spent my half an hour to read this weblog’s content daily along with a mug of coffee.|
    I constantly emailed this website post page to all my associates, for the reason that if like to read it afterward my contacts will too.|
    My coder is trying to convince me to move to .net from PHP.
    I have always disliked the idea because
    of the expenses. But he’s tryiong none the less. I’ve been using WordPress
    on various websites for about a year and am anxious about switching
    to another platform. I have heard very good things about blogengine.net.

    Is there a way I can import all my wordpress posts into
    it? Any help would be greatly appreciated!|
    Good day! I could have sworn I’ve visited this website before but after looking
    at a few of the articles I realized it’s new to me.
    Regardless, I’m definitely pleased I came across it and I’ll be bookmarking it and checking back frequently!|
    Great work! This is the kind of info that are meant to be shared across the web.
    Disgrace on Google for no longer positioning this put up
    upper! Come on over and seek advice from my website . Thank you =)|
    Heya i’m for the first time here. I found this board and I find It really useful & it helped me
    out much. I hope to give something back and aid others like you aided me.|
    Hello, I believe your web site might be having internet
    browser compatibility issues. When I take a look at your website in Safari, it
    looks fine however, if opening in IE, it’s got some overlapping issues.
    I merely wanted to provide you with a quick heads up!
    Besides that, excellent website!|
    A person necessarily lend a hand to make seriously posts I would state.

    This is the first time I frequented your web page and up to now?
    I amazed with the research you made to make this particular submit amazing.
    Magnificent task!|
    Heya i am for the first time here. I found this board and I to
    find It truly useful & it helped me out much. I’m hoping to give
    something again and aid others such as you aided me.|
    Howdy! I simply would like to offer you a huge thumbs up for your excellent information you’ve got right here
    on this post. I am coming back to your web site for more soon.|
    I always used to study piece of writing in news papers
    but now as I am a user of web therefore from now I am
    using net for articles, thanks to web.|
    Your means of explaining the whole thing in this article is genuinely fastidious, all be capable
    of without difficulty be aware of it, Thanks a lot.|
    Hi there, I discovered your site via Google while searching for
    a similar subject, your website got here up, it looks good.
    I’ve bookmarked it in my google bookmarks.
    Hi there, simply became aware of your blog thru Google, and found that it is really informative.
    I am gonna be careful for brussels. I will be grateful in case you proceed
    this in future. Numerous other folks shall be benefited from your writing.
    Cheers!|
    I’m curious to find out what blog system you’re
    utilizing? I’m experiencing some small security problems with my latest
    website and I would like to find something more safe.
    Do you have any solutions?|
    I’m really impressed with your writing skills as well as with the layout on your blog.
    Is this a paid theme or did you modify it yourself? Either way keep
    up the excellent quality writing, it’s rare to see a nice blog like this one nowadays.|
    I am extremely impressed along with your writing abilities and also with the format on your weblog.
    Is that this a paid theme or did you modify it yourself?

    Anyway keep up the nice high quality writing, it is rare to
    look a nice blog like this one these days..|
    Hi, Neat post. There is a problem together with your website in internet explorer, may check this?
    IE still is the market leader and a large element of
    people will omit your great writing due to this problem.|
    I’m not sure where you are getting your info, but good topic.
    I needs to spend some time learning much more or understanding more.
    Thanks for great information I was looking for this information for my mission.|
    Hi, i think that i saw you visited my web site thus i came to
    “return the favor”.I’m attempting to find things to improve my web site!I suppose its ok to
    use a few of your ideas!\

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s