9
تشکر

GD یا Imagick، کتابخانه‌های گرافیکی PHP

PHP – پی اچ پی

PHP – پی اچ پی

زبان PHP برای کار با تصاویر و تغییرات در آن‌ها کتابخانه‌های متفاوتی را ارائه داده است که مهمترین و مشهورترین آن‌ها GD و ImageMagick است. برای ایجاد تصاویر یا تغییرات در آن‌ها مانند تغییر در عرض و طول، چرخش، سایه ها، ایجاد متن و غیره باید از یکی از این کتابخانه‌ها استفاده کرد.
در این مطلب ما به مقایسه دو کتابخانه GD و Imagick میپردازیم.
در ادامه مطلب همراه ما باشید…

در دسترس بودن

هر دو کتابخانه GD و Imagick در PHP قابل نصب و دارای تنظیمات گوناگونی هستند. کتابخانه GD از نسخه PHP 4.3 به صورت پیشفرض در این زبان وجود دارد و از این لحاظ شما میتوانید مطمئن باشید که کدهایی که با این کتابخانه نوشته می‌شوند در بیشتر سرورها قابل اجرا هستند. اما در سوی دیگر Imagick ممکن است در بعضی از سرورها فعال نباشد و یا حتی نصب نشده باشد.
توسط کد زیر میتوانید از نصب و فعال بودن هر دو کتابخانه مطلع شوید که در صورت فعال بودن فرمت های پشتیبانی کننده هر کتابخانه را نشان میدهد.

echo "GD library<br>";
if(extension_loaded('gd')) {
  print_r(gd_info());
}
else {
  echo 'GD is not available.';
}

echo "<br>Imagick library<br>";
if(extension_loaded('imagick')) {
  $imagick = new Imagick();
  print_r($imagick->queryFormats());
}
else {
  echo 'ImageMagick is not available.';
}

فرمت های پشتیبانی کننده

اگر کد بالا را اجرا کرده باشید متوجه ویژگی مهم Imagick خواهید شد. GD تنها از فرمت های JPG, PNG, GIF, WBMP, WebP, XBM و XPM پشتیبانی میکند. در حالی که Imagick علاوه بر آن‌ها از بسیاری از فرمت های دیگر که مهمترین آن‌ها اعم از SVG, BMP, TIFF, HDR هستند نیز پشتیبانی میکند.

قابلیت‌ها

هر دو کتابخانه از قابلیت‌هایی مانند تغییر سایز، برش، ساخت تصویر از ابتدا و فیلترها پشتیبانی میکنند. اما اگر به قابلیت‌های پیشرفته‌تر و متدهای جدیدتر نیاز دارید باید از Imagick استفاده کنید.
کتابخانه Imagick با بیش از 331 متد راه‌های بسیار مختلفی را برای کار بر روی تصاویر ارائه میدهد.

در مورد عملکرد و سرعت اجرا، اگر میخواهید فقط بر روی عکس، کارهایی مانند تغییر سایز، برش و کارهایی ساده از این قبیل انجام دهید زیاد به سرعت اجرا در دو کتابخانه توجه نکنید زیرا با هم تفاوت چندانی ندارند. در کارهای پیچیده‌تر نیز بستگی به کار مورد نظر دارد که ممکن است هر کتابخانه، در موردی، دارای عملکرد بهتری باشد.

برنامه نویسی

نوع برنامه نویسی در این دو کتابخانه کاملاً با هم متفاوت است زیرا GD از مجموعه‌ای از توابع تشکیل شده است در حالی که Imagick از کلاس استفاده و به صورت شی گرا کار میکند.
در یک مثال ساده، در GD برای تغییر در یک تصور ابتدا باید فرمت آن را بشناسید و از تابع مخصوص همان فرمت برای بارگذاری تصویر استفاده کنید.
برای مثال در کد زیر ما از کتابخانه GD برای بارگذاری، تغییر ساز تصویر و در نهایت ذخیره آن استفاده میکنیم. البته با این پیشفرض که ما نوع فرمت تصویر را، از ابتدا میدانیم و همچنین از به وجود نیامدن هر نوع خطا در کدهای زیر نیز مطمئن هستیم.

$src_img = imagecreatefromjpeg('source.jpg');
$thumbnail = imagecreatetruecolor(800, 800);
$result = imagecopyresampled($thumbnail, $src_img, 0, 0, 0, 0, 800, 800, 1600, 1600);
$result = imagejpeg($thumbnail, 'destination.jpg');
$result = imagedestroy($thumbnail);

اگر از نوع فرمت تصویری بی اطلاع هستیم میتوانیم برای مثال از کد زیر برای بارگذاری تصویر استفاده کنیم.

switch($image_type) {
  case 'gif' :
    $src_img = imagecreatefromgif($path);
    break;
  case 'png' :
    $src_img = imagecreatefrompng($path);
    break;
  case 'jpg' :
  case 'jpeg' :
    $src_img = imagecreatefromjpeg($path);
    break;
  default:
    return false;
    break;
}

اما با استفاده از Imagick دیگر لازم نیست نوع فرمت شناسایی شود و خود Imagick اینکار را انجام میدهد همچنین در زمان ذخیره عکس نیز لازم به استفاده از تابع های گوناگون برای هر نوع فرمت تصویری نیست و فقط با استفاده از متد setImageFormat میتوان فرمت مورد نظر را درخواست کرد.
مثال بالا را اینبار با استفاده از Imagick انجام میدهیم.

$imagick = new Imagick();
$imagick->readImage('source.jpg');
$imagick->thumbnailImage(800, 800);
$imagick->writeImage('destination.jpg');

محبوبیت

همانطور که انتظار می‌رود به دلیل وجود کتابخانه GD به صورت پیشفرض درون PHP، این کتابخانه دارای محبوبیت بیشتری نسبت به Imagick است و به همین دلیل نیز پشتبانی بهتری دارد.

نتیجه‌گیری

در‌ واقع کتابخانه GD فقط به یک دلیل دارای محبوبیت زیادی است و دارای مثال‌ها و کتابخانه‌های گوناگون است، و آنهم مورد دسترس بودن در بیشتر سرورها است که اگر این دلیل نبود به نظر میرسد که تا به حال عمر آن به پایان رسیده بود.

  • آروین می‌گه:

    سلام
    آقا دست شما درد نکنه مثل همیشه مفید بود.
    من قبلا با GD کار کرده بودم ولی اصلا اسم ImageMagick رو هم نشنیده بودم.

    راستی میشه یه کم درباره ساخت یه واژه پرداز تحت وب توضیح بدید منظورم ویرایش گرهای متنی هست که اکثرا سیستم های مدیریت محتوای تحت وب استفاده می کنن.

    راستش خودم فکر می کردم که اونا رو با Flash یا Silverlight می سازن ولی هر چی تو کداش جستجو کردم اثری از اون دوتا پیدا نکردم.

    لطفا این مطلب هم به کلکسیون مطالب کاربردی و مفیدتون اضافه کنید…

  • محمد صالحی می‌گه:

    سلام
    مطلب مفیدی بود ، به نظر من GD بیشتر به درد کارهای دم دستی و سبک مث تولید کپچا و… به درد میخوره ، وگرنه برای کارهای حرفه ای اصلا نمیشه روش حساب کرد.

    تشکر


  • نظرات این مطلب بسته است.