دریافت مشخصات عکس در php

  • آپدیت شده در تاریخ

دریافت مشخصات عکس در php نیاز به یک سری از توابع php دارد . داده ها یا اطلاعات ک همراه با یک عکس ذخیره شده اند را ، metadata می نامیم . برای مثال ، نوع عکس ، عرض و طول تصویر ، ویژگی ها ، تاریخ ساخت ، تاریخ آخرین ویرایش (دستکاری) و غیره …

این مشخصات به صورت معمول با مشاهده ساده عکس قابل نمایش نیستند . در این آموزش نحوه دریافت مشخصات عکس در php (یا همان metadata) را بررسی خواهیم کرد.

زبان php ، توابع و DLL های زیادی برای استخراج مشخصات از یک تصویر را در اختیار ما قرار می دهد . این توابع در زیر لیست شده اند :

  1. imagesx() and imagesy()
  2. getimagesize()
  3. exif_read_data()

DLL های مربوطه که باید در هنگام استفاده از توابع بالا فعال باشند php_mbstring.dll و php_exif.dll هستند . برای اطمینان باید این اسامی را در فایل php.ini جستحو کنیم و یا اینکه اگر دسترسی به فایل را نداریم (معمولا در هاست های اشتراکی به اینصورت است) باید از مدیر سرور سوال کنیم .

و نتیجه یافت شده باید به اینصورت باشد :

;extension=php_mbstring.dll
;extension=php_exif.dll

و سپس برای فعال کردن این DLL ها باید ; (سیم کولون) رو از اول خط حذف کنیم . همچنین باید دقت کنیم که باید mbstring بالاتر از exif باشد !

توابع imagesx() و imagesy()

توابع imagesx() و imagesy() به ترتیب برای دریافت عرض و طول تصویر به کار می روند . این توابع دیتا های عکس برگشتی یا ساخته شده به صورت داینامیک توسط php را نیز قبول می کنند . برای مثال ، تصاویر کپچا که به صورت داینامیک توسط php ساخته می شود و برای تفکیک کاربر عادی و ربات به کار می رود . اگر قصد بررسی طول و عرض تصویر کپچایی که ساختیم را داشته باشیم از imagesx() و imagesy() استفاده می کنیم.

دریافت مشخصات عکس در php

Getimagesize()

این متد php یک آرایه از مشخصات عکس مانند طول و عرض ، نوع عکس ، mime type و غیره .. را برمی گرداند . این متد دیتا های محدودی از عکس را برمی گرداند . ولی ، نیاز نیست داده هایی این عکس را در آرگومان این تابع وارد کنیم ، در عوض ، فقط باید آدرس محل تصویر را مشخص کنیم که می تواند به دو صورت نسبی (relative)  و یا کامل (absolute) باشد .

اسکریپت php زیر برای استخراج و دریافت مشخصات عکس در php استفاده می شود .

اول از همه ، یک فرم html برای انتخاب فایل عکسی که قصد دریافت مشخصات آن را داریم ، می سازیم .همانطور که در مقاله های قبل هم دید ، برای آپلود فایل توسط فرم html ، باید خاصیت enctype را مشخص کنیم .، البته این خاصیت زمانی که متد ارسالی فرم به صورت post باشد هم قابل استفاده است ، همانند کد زیر :

بعد از آن ، برای دسترسی به دیتاهای فرم ارسالی توسط اسکریپت php باید کد زیر را بالای فرم html خود اضافه کنیم.

این اسکریپت در هنگام زدن دکمه submit فرم اجرا می شود ، و فایل عکس به آرایه سوپر گلوبال اضافه می شود .بعد از گذشت از شرط اینکه $_FILE خالی نیست ، اسم فایل را در تابع getimagesize() مشخص می کنیم. در آخر ، مشخصات عکس به صورت یک آرایه برگردانده و در مرورگر نمایش داده می شود .برای خوانایی بیشتر آرایه آن را داخل تگ های <pre> قرار دادیم .

Exif_read_data()

از آنجایی که تابع getimagesize() مشخصات محدودی از تصویر را به ما نشان می داد ، exif_read_data() برای دریافت اطلاعات بیشتری از عکس به کار می رود . به اضافه اطلاعات طول و عرض ، این تابع لیست بزرگی از مشخصات مثل تاریخ ساخت ، تاریخ آخرین دستکاری ، اسم فایل ، حجم ، وضعیت ، رزولیشن و غیره… می دهد

این تباع برای استخراج مشخصات (metadata) های عکس های دیجیتالی که داده Exif در هدر (سربرگ) ذخیره شده است به کار می رود . Exif یک فرمت استاندارد برای تصاویر است .

نوع تصاویر (image types) به طور کل ۱۶ تا هستند . که بسته به دستگاه گرفتن عکس متفاورت است . نوع تصاویر بر اساس شماره برگشت داده می شوند که هرکدام مشخص کننده نوع هایی مثل gif , png,… هستند. برای مثال عدد ۲ مشخص کننده توصویر JPEG است.!

در کد php بالا خط مربوط به getimagesize() را به اینصورت جایگزین کنید .

برای دریافت اطلاعات EXIF عکس این خط کد را جایگزین می کنیم

در پایان امیدوارم از مقاله آموزشی دریافت مشخصات عکس در php استفاده کرده باشد.

موفق و پیروز باشید.

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۲۳)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. بنیامین ۹ شهریور ۱۴۰۱

    عاااااااااااالی…
    بعد کلی جست و جوی انگلیسی آخر فارسی جستوجو کردم و با آموزش شما کارم اوکی شد…
    سپاس

    پاسخ
    1. حسن شفیعی ۱۰ شهریور ۱۴۰۱

      سلام. خوشحالیم که مفید واقع شده
      موفق باشید

      پاسخ
  2. علیرضا ۱۱ خرداد ۱۴۰۱

    سلام
    من وقتی از تابع imagesx و imagesy استفاده میکنم، ارور دریافت می کنم و میگه این تابع یافت نشد.
    چیکار باید بکنم؟
    نگاه کردم املاش هم درست بود اما مشکل داره

    پاسخ
    1. حسن شفیعی ۱۳ خرداد ۱۴۰۱

      سلام. لطفا خطای دقیق رو بفرستید

      پاسخ
  3. زینب ۱ مهر ۱۳۹۸

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

    پاسخ
    1. حسن شفیعی ۲ مهر ۱۳۹۸

      سلام.
      از کتابخانه imagemagick برای php استفاده کنید
      https://imagemagick.org/index.php
      تقریبا هر کاری که فکر می کنید میتونید با تصاویر انجام بدید
      موفق باشید.

      پاسخ
  4. زینب ۲۷ شهریور ۱۳۹۸

    با سلام
    یه سوال از خدمتتون دارم
    شما در رابطه با کاربرد معادلات افاین تو زبان php برای برداشت مختصات زمینی عکس میتونین من رو راهنمایی کنین؟
    میخاستم ببینم کدهای آماده اش موجوده یا نه؟

    پاسخ
    1. حسن شفیعی ۲۷ شهریور ۱۳۹۸

      سلام. بله توابع خود php برای اینکار موجود هست :
      https://www.php.net/manual/en/function.imageaffine.php
      از کتابخانه های php برای اینکار هم میتونید استفاده کنید :
      https://github.com/RnbwNoise/ImageAffineMatrix
      https://phpimagick.com/ImagickDraw/affine
      موفق باشید.

      پاسخ
      1. شهرزاد ۲۷ شهریور ۱۳۹۸

        دستتون درد نکنه

        پاسخ
  5. شبنم ۱۳ شهریور ۱۳۹۸

    یه سوال دیگه هم دارم…
    آیا امکان اینکه از مختصات چهارگوشه ی عکس به مختصات مرکز عکس رسید،هست؟
    در این رابطه اگه اطلاعاتی دارین من رو راهنماییم کنین
    خیلی ممنونم….

    پاسخ
    1. حسن شفیعی ۱۳ شهریور ۱۳۹۸

      سلام ممنون.
      برای دریافت برای دریافت مرکز از تقسیم عرض و ارتفاع بر ۲ استفاده کنید
      از تابع imagecopyresampled برای سوال اول استفاده کنید
      موفق باشید.

      پاسخ
      1. شبنم ۱۴ شهریور ۱۳۹۸

        خیلی ممنونم

        پاسخ
  6. شبنم ۱۳ شهریور ۱۳۹۸

    باسلام
    خسته نباشین
    من طول و عرض عکسم رو دارم و الان میخام مختصات چهارگوشه ی تصویرم رو در php دریافت کنم
    برای اینکار اگه امکان داره راهنماییم کنین
    خیلی ممنونم

    پاسخ
  7. zeynab ۲۸ مرداد ۱۳۹۸

    با سلام
    برای دریافت رنگ یه پیکسل از چه تابعی میتونم استفاده کنم, من موقعیت این پیکسل رو روی عکسم دارم,میخام مختصات بدم ورنگش رو ذخیره کنم تو جدولم

    پاسخ
    1. حسن شفیعی ۲۸ مرداد ۱۳۹۸

      سلام
      با imagecolorat می توانید با دادن مختصات x,y و متغیر ریسور, رنگ پیکسل مورد نظر را دریافت کنید
      به اینصورت :
      $color = imagecolorat($rc, $x, $y);
      موفق باشید.

      پاسخ
      1. zeynab ۲۹ مرداد ۱۳۹۸

        سلام
        خیلی ممنونم
        دو تا نکته
        یکی اینکه این تابع imagecolorat سه رنگ قرمز، آبی و سبز رو داره مشخص می کنه، من نیاز به رنگ زردم دارم اون رو چجوری باید دریافت کنم؟نکته ی دیگه هم اینکه من تو ذخیره ای این رنگ هام الان مشکل دارم.این تابع داره نمایش می ده رنگ ها رو. من همه چی مثا ابعاد یه عکس ، تاریخ و نوع و همه اینا رو میتونم ذخیره کنم در دیتابیسم اما رنگ پیکسل رو چجوری باید ذخیره کنم، اگه متوجه منظورم شدین راهنماییم کنین.خیلی مچکرم.

        پاسخ
      2. حسن شفیعی ۲۹ مرداد ۱۳۹۸

        سلام. باید داخل داکیومنت این تابع در سایت php.net به دنبال جوابتون باشید.
        مقداری که برگشت داده میشه (رنگ) اگر بصورت رشته هست که خب به راحتی داخل دیتابیس میشه ذخیره کرد درغیر اینصورت چون به صورت آریه ای است ایندکسش رو مشخص کنید و بعد ذخیره کنید به اینصورت :
        $rgb = imagecolorat($pixel, x, y);
        $color = imagecolorsforindex($pixel, $rgb);

        موفق باشید.

        پاسخ
      3. zeynab ۲۹ مرداد ۱۳۹۸

        بله
        متوجه شدم
        دستتون دردنکنه
        هم به دلیل راهنماییون
        هم بابت زود جواب دادن به سوالات و مشکلات.
        خیلی ممنونم

        پاسخ
  8. شهرزاد ۱۵ مرداد ۱۳۹۸

    باسلام
    برای دریافت اطلاعات x,y یه پیکسل از عکس و ذخیره اش توی پایگاه داده از چه کدی باید استفاده کرد

    پاسخ
    1. حسن شفیعی ۱۵ مرداد ۱۳۹۸

      سلام.
      از توابع imagesx و imagesy استفاده کنید.
      موفق باشید.

      پاسخ
      1. شهرزاد ۱۶ مرداد ۱۳۹۸

        سلام
        خیلی ممنونم از پاسخ گوییتون
        یک سوال دیگه هم دارم
        برای پردازش تصویر در زبان php فقط میشه از کتابخونه gd استفاده کرد یا opencv هم امکان پذیره ؟؟

        پاسخ
      2. حسن شفیعی ۱۶ مرداد ۱۳۹۸

        سلام. بله امکانش هست. فقط باید روی سرور نصبش کنید که اگر هاست اشتراکی هست که امکانش نیست.
        روی لینوکس هم که با سرچ میتونید پیدا و نصب کنید.
        برای استفاده از opencv هم میتونید از کتابخانه php اماده مربوطه بهره ببرید
        https://github.com/php-opencv/php-opencv
        موفق باشید.

        پاسخ
      3. شهرزاد ۱۷ مرداد ۱۳۹۸

        خیلی ممنونم از راهنماییتون

        پاسخ
دوره های آموزشی