تبدیل متن به عکس در php

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

تبدیل متن به عکس در php

بروز رسانی : حل مشکل تبدیل متن فارسی به عکس در php + راستچین شدن حروف

در بعضی مواقع ، نیاز داریم که یک عکس داینامیک ایجاد کنیم ودر پروژه های تحت وب متن دلخواه را بر روی عکس بنویسیم. اگر شما نیاز به همچین قابلیتی دارید نگران نباشید در مقاله تبدیل متن به عکس در php نحوه ساخت و ذخیره آن در فرمت های JPG  یا PNG آموزش می دهیم. در این آموزش ، به شما راحترین راه برای ساخت عکس از روی متن توسط php را نشان خواهیم داد.برای اینکار از یک کلاس PHP برای ساخت عکس و اضافه کردن خطوط مختلف به تصویر استفاده می کنیم کتابخانه GD برای ساخت و دستکاری فایل های عکس در php مورد استفاده قرار میگیرد .پس قبل از هرکاری مطمین باشید که PHP GD بر روی سرور شما نصب شده باشد.(بر روی بیشتر سرورهای هاستینگ ها و ابزار های راه انداز سرور لوکال این مورد نصب است !)

کلاس TextToImage

کلاس TextToImage در php به ما این امکان را می دهد که یک عکس را بسازیم و متن دلخواه را به آن اضافه کنیم کلاس TextToImage دارای ۴ تابع است که در زیر توضیح داده شده

  • createImage() – ساخت عکس از روی متن . رشته متن باید به عنوان ورودی به تابع داده شود . همچنین میتوانید اندازه فونت و ابعاد (طول و عرض ) را مشخص کنید
  • showImage() – عکس ساخته شده توسط تابع createImage() را return میکند.
  • saveAsPng() – عکس را در فرمت .png ذخیره میکند . می توانید اسم فایل و محل ذخیره سازی را مشخص کنید .
  • saveAsJpg() – عکس را در فرمت .jpg ذخیره میکند . می توانید اسم فایل و محل ذخیره سازی را مشخص کنید .

 

تبدیل متن به عکس در php

فایل TextToImage.php (کلاس TextToImage)  را اینکلود و یک آبجکت (نمونه) از آن را می سازیم . تابع createImage() را فراخوانی و رشته متنی را به تابع پاس میدیم. اگر قصد اضافه کردن چنید خط را داشتید ، قبل از خط جدید “\n” را اضافه کنید

برای نمایش عکس از تابع showImage() استفاده میکنیم

برای ذخیره سازی عکس در فرمت های Png یا JPG از تابع saveAsPng() یا SaveAsJpg() استفاده میکنیم . اگر نام فایل خروجی و مکان ذخیره سازی را مشخص نکنید ، عکس با اسم همان دایرکتری که اسکریپت را اجرا کردید ذخیره خواهد شد.

 

تبدیل متن فارسی به عکس در php

همانطور که می بینید کلاس و کد های بالا برای تبدیل متن انگلیسی به عکس هیچ مشکلی ندارد

تبدیل متن به عکس در php

ولی در تبدیل متن فارسی به عکس در php با کد های بالا به مشکلاتی مثل برعکس شدن حروف ، جدا نوشته شدن و مشکلات دیگر بر میخورید که مشکل اصلی به خاطر دیتاهای unicode است .

تبدیل متن به عکس در php

برای حل مشکل یک روش جایگزین دیگر برای تبدیل متن فارسی به عکس در php معرفی کردیم :

ساختار فایل های پروژه تبدیل متن فارسی به عکس در php

  • /fonts
  • bidi.php
  • persian_txt2pic.php
  • unicode_data.php
  • index.php

برای دانلود پروژه تبدیل متن فارسی به عکس در php  کلیک کنید

بعد از اکسترکت کردن ، فایل index.php را اجرا و متن خود را وارد و خروجی عکس را تحویل بگیرید

تبدیل متن به عکس در php

برای تغییر اندازه عکس ، فونت ها ، رنگ پس زمینه و رنگ متن فایل index.php را ویرایش کنید

خب همانطور که متوجه شدید direction حروف به صورت left to Right یعنی راست به چپ است . برای حل این مشکل از تابع imagettfbbox برای دریافت عرض متن استفاده می کنیم و بعد آن را از عرض خود عکس کم می کنیم تا مقدار مابه التفاوت را به عنوان فاصله متن از سمت چپ در نظر گرفتیم که باعث شد متن فارسی ما از سمت راست شروع شود.

کد اصلاحی راستچین کردن تبدیل متن فارسی به عکس در php

برای صحیح کپی شدن کدهای php بر روی کدها دابل کلیک کنید تا وارد محیط سفید و کپی کنید در غیراینصورت امکان دارد اجرای کدها با مشکل روبرو شود .

dostlover402@yahoo.com

برای نوشتن متن به صورت چند خطی از تابع wordwrap به اینصورت بعد از دریافت متن و ذخیره آن در یک متغییر به اینصورت استفاده کنید

عدد ۴۵ به این معنی است که هر خط شامل چند حرف یا کاراکتر باشد .

جمع بندی

کلاس TextToImage به طور پیش فرض از فونت b Yekaan برای متن استفاده می کند. اگر خواستید فونت پیش فرض را تغییر بدید کافیست فونت مورد نظر را در دایرکتری fonts/ قرار بدید و آدرس را به تابع createImage($font) پاس بدید   امیدوارم از آموزش تبدیل متن به عکس در php لذت برده باشید . موفق باشید.

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

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

  1. صالح ۱۶ شهریور ۱۴۰۰

    سلام ، من قطعه کد های شما را قرار دادم
    اما ماسفانه تصویری که درست شد در آن هیچ متنی نیست.

    مشکل و ایراد کار از کجا است؟

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

      سلام.
      احتمالا ورژن php شماست که بالا یا پایین کنید اوکی میشه

      پاسخ
  2. متین ۶ شهریور ۱۴۰۰

    سلام ، وقتی فونت مورد نظرمو جایگزین میکنم تو تایپ لاتین درست نمایش میده ولی تو تایپ فارسی چیزی نشون میده ، با اینکه فونت هم فارسی هست

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

      سلام.
      این کتابخانه رو چک کنید :
      https://github.com/mahmoud-eskandari/PersianRender

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

    سلام ممنون از آموزش ، بنده فقط در تغییر فونت مشکل دارم ، فونت دلخواهمو آپلود کردم ولی تو خروجی هیچی نشون نمیده ، مشکل از کجاست ؟

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

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

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

        بله اینکارو کردم ، وقتی آدرس رو همون فونت پیش فرض dejavu هست خروجی رو نشون میده ولی وقتی آدرس رو تغییر میدم به فونتی که آپلود کردم نشون نمیده چیزی ، فونتی‌ بنده آپلود کردم kalameh-black هست …

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

        سلام. احتمالا کش کرده باید کش رو حذف و مجدد تست کنید

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

        نه مشکل از خوده فونت بود ، این فونتو من تو html css استفاده کردم و مشکلی نداشت اما تو php فقط رو حالت انگلیسی نشون میداد . بعد یه فونتی که درست کار میکردو با فونت کریتور ادیت کردم و تک تک کاراکترای حروفو از رو اون فونتی که میخواستم کپی پیس کردم تا مشکل حل شد 😐😃

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

        سلام ممنون از پاسخون اما من فایل php رو هم ویرایش کردم و اسمشو هم تغییر دادم ولی بعد از تغییر اسم خروجی چیزی نمایش داده نمیشه ، ولی روی همون فونت پیش فرض اوکیه و کار میکنه …

        پاسخ
  4. SMB ۱۱ اسفند ۱۳۹۹

    سلام
    من برنامه رو گزاشتم داخل هاستم ولی ارور میده
    Fatal error: Array and string offset access syntax with curly braces is no longer supported in E:\xampp\htdocs\Persian-txt2img-netparadis\Persian-txt2img\bidi.php on line 70
    چیکار کنم؟؟

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

      سلام. احتمالا به خاطر ورژن php شماست ورژن رو بالا پایین کنید و تست کنید

      پاسخ
  5. علیرضا ۹ فروردین ۱۳۹۹

    و یه سوال دیگه امکانش هست ما یه متن رو با استفاده از css استایل دهی کنیم و روی یک عکس با پس زمینه شفاف قرار دهیم و خروجی را تبدیل به png بازهم با پس زمینه شفاف کرد ؟؟ اگر اموزشی هم در این رابطه معرفی کنید ممنون میشم

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

      سلام. از این کتابحانه که امکانات فراوان از جمله قابلیت هایی که نیاز دارید استفاده کنید :
      https://github.com/kus/php-image
      موفق باشید.

      پاسخ
  6. علیرضا ۹ فروردین ۱۳۹۹

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

    – مختصات متن ثابت باشه یعنی wight و hight ثابت باشه
    – با توجه به تعداد کاراکتر متن سایز متن تغییر کنه
    منظورم اینه ما محل نوشتن متن رو مرکز تصویر قرار بدیم و اگه متن کاراکترهاش زیاد بود از صفحه نزنه بیرون و فقط سایز فونت کم بشه که متن کامل داخل عکس قرار بگیره اگر اموزشی در این مورد معرفی کنید ممنون میشم

    پاسخ
  7. farshid ۱۷ بهمن ۱۳۹۸

    سلام واسه منم یک صفحه سیاه رنگ میاد و الان پی اچ پی ورژن ۷٫۰ اومده ، چجوری استفاده کنم از این کدها؟؟؟؟لطفا جواب بدید خیلی نیاز دارم کدهارو…

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

      سلام. لطفا روی ورژن ۵٫۶ تست و نتیجه رو اعلام کنید. همچنین سورس کامل که در باکس دانلود است را دریافت و دقیقا همان را استفاده کنید.
      موفق باشید.

      پاسخ
      1. farshid ۱۸ بهمن ۱۳۹۸

        اول ممنون بابت اینک سریع جواب دادید ، بله به درستی کار میکنه روی ورژن ۵٫۶ و خیلیم عالی و تمیز هست کد ، فقط راه حلی واسه ورژن های بالاتر ندارید؟؟ آخه دیگه کسی از ورژن های پایین استفاده نمیکنه…

        پاسخ
      2. حسن شفیعی ۱۸ بهمن ۱۳۹۸

        سلام. خوشحالیم که مفید واقع شده
        چشم حتما روی ورژن جدید تست و ویرایش و بعد اطلاع رسانی میشه که استفاده کنید.
        موفق باشید.

        پاسخ
  8. امیرحسین آقاجانی ۳ آبان ۱۳۹۸

    سلام.. چطوری میشه چندین متغیر رو به یه عکس چسبوند؟

    با تشکر از آموزشای خوبتون

    پاسخ
    1. حسن شفیعی ۸ آبان ۱۳۹۸

      سلام. اگر درست متوجه شده باشم نیاز است که مقادیر متغییر ها را داخل ” و داخل متغیر $text قرار بدید
      به اینصورت :
      $text = ” $name fa Name $fa “;
      موفق باشید.

      پاسخ
  9. علی ۲۳ مرداد ۱۳۹۸

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

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

      سلام. ممنون.
      به این معنی است که متن موردنظر روی تصویر چاپ نمی شود. سعی کنید از ورژن php 5.6 استفاده کنید.
      موفق باشید.

      پاسخ
  10. حامد ۳۰ اردیبهشت ۱۳۹۸

    سلام
    می خواستم بدونم امکان این وجود داره که قسمتی از کد html رو مثلا یک div که شامل چند div دیگه است رو هم به صورت عکس خروجی داد؟

    پاسخ
    1. حسن شفیعی ۳۰ اردیبهشت ۱۳۹۸

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

      پاسخ
      1. حامد ۴ خرداد ۱۳۹۸

        سلام مجدد
        یعنی فرمایش می فرمایید که در این قسمت
        $text = ‘Welcome to NetParadis.\nThe World of Programming.’;
        $img->createImage($text);
        میشه یه div گذاشت و با همه css ها به عکس تبدیل میشه؟

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

        سلام. لطفا این مورد را تست کنید تا نتیجه نهایی را ببینید.
        موفق باشید.

        پاسخ
  11. مات ۶ بهمن ۱۳۹۷

    سلام
    بخوا م متن روی یه عکس باشه چیکار باید بکنم ؟

    پاسخ
    1. حسن شفیعی ۶ بهمن ۱۳۹۷

      سلام. با ایده گرفتن از این آموزش می توانید متن دلخواه رو روی عکس قرار بدید
      https://netparadis.com/create-captcha-in-php/

      موفق باشید.

      پاسخ
  12. محمد ۳ فروردین ۱۳۹۷

    سلام خسته نباشید
    یه راهنمایی می خواستم
    آیا میشه پس رمینه بدون رنگ باشه یعنی transparnt؟
    یا میشه مستقیم یه متن رو روی یک عکس انداخت؟یا اول باید متن به عکس تبدیل بشه بعد روی یک عکس دیگه گذاشته بشه؟

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

      سلام . ممنون

      بله می تونید از تابع imagecolortransparent استفاده کنید.

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

      موفق باشید.

      پاسخ
  13. Mahdi ۱۰ اسفند ۱۳۹۶

    سلام وقتی کد هارو جمع بندی کردیم و بعدش تو هاست آپلود کردیم چطور استفاده کنیم
    میشه به صورت مثال بگید
    مثل
    https://example.com/MatnbeAks.php

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

      سلام . باید بصورت پارامتر GET از طریق URL متن خودتون رو وارد کنید.
      موفق باشید.

      پاسخ
      1. Mahdi ۱۰ اسفند ۱۳۹۶
      2. حسن شفیعی ۱۱ اسفند ۱۳۹۶

        بله به اینصورت باید متن رو پاس بدید .

        پاسخ
  14. مهدی ۱۶ دی ۱۳۹۶

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

    پاسخ
    1. حسن شفیعی ۱۶ دی ۱۳۹۶

      سلام . بله این مشکل جزئی با کاراکترهای چندخطی فارسی وحود داره .
      برای تغییر رنگ پس زمینه این قسمت از کد را تغییر بدید
      imagefilledrectangle($this->img, 0, 0, $imgWidth – 1, $imgHeight – 1, $white);
      در پارامتر آخر به جای $white , متغییر $black را پاس بدید

      موفق باشید.

      پاسخ
  15. فرهاد ۳ مهر ۱۳۹۶

    سلام دوست عزیز
    متن عشق رو به صورت ق ش ع مینویسه
    نمیشه درست کرد؟

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

      سلام فرهاد جان .
      بله به خاطر مشکل دیتاهای یونیکد این مشکل به طور پیشفرض وجود داشت که راه حل رو ارایه دادیم و می تونید با خیال راحت از روش جایگزین استفاده کنید
      موفق باشید

      پاسخ
      1. رضا ۱۸ آبان ۱۳۹۶

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

        پاسخ
      2. حسن شفیعی ۲۱ آبان ۱۳۹۶

        سلام . خواهش می کنم . نباید مشکلی باشه همانطور که در عکس می بینید متن فارسی به راحتی راست به چب شده . باز هم اگر مشکلی بود کد رو قرار بدید تا بررسی بشه
        موفق باشید

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