کار با تصاویر توسط ImageMagick

نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

imagemagick

ImageMagick یک مجموعه فوق‌العاده از کتابخانه (Libraries) و برنامه (Binaries) رایگان و متن‌باز و چندسکویی برای کار با تصاویر پیکسلی (Raster Graphics) و برداری (Vector Graphics) با امکانات فراوان برای نمایش، تبدیل، تغییر و ویرایش است و می‌تواند با بیش از ۲۰۰ فرمت مختلف تصویر کارکند. از این برنامه می‌توان از طریق رابط خط فرمان (CLI) و یا برنامه‌ های نوشته شده توسط کتابخانه‌های آن در زبان‌های دیگر استفاده کرد. برای آشنایی با ImageMagick تنها به این پست اکتفا نکرده و حتما مستندات آن را بخوانید.

برای مثال تمامی تغییرات زیر به راحتی با استفاده از خط فرمان قابل اعمال به تصاویر هستند:

ImageMagick examples

در ادامه چندتا از دستورات پر استفاده را مرور می‌کنیم. اما قبل از آن روش نصب:

نصب

ImageMagick چندسکویی بوده و برای سیستم‌عامل‌های مختلف در دسترس است. برای استفاده از آن می‌توان از کتابخانه‌های آن برای زبان‌های مختلف من جمله C و ++C، پایتون، PHP و غیره استفاده کرد و یا برنامه‌های آماده (Binaries) آن را نصب و استفاده کرد.

ویندوز

برای نصب ImageMgick در ویندوز می‌توان فایل نصب (exe) آن را دریافت کرد و یا با استفاده از پکیج منیجر Chocolatey (از اینجا دریافت کنید) با وارد کردن دستور زیر در CMD آن را نصب کرد:

لینوکس

برای نصب ImageMagick روی لینوکس، از دستورات زیر استفاده می‌کنیم:

اطلاعات بیشتر

روش استفاده

استفاده از ImageMagick توسط رابط خط فرمان بسیار ساده است (لیست مثال‌های استفاده). قالب اجرای دستورات با استفاده از دستور magick --help  و magick -usage  به صورت زیر است (برای مشاهده کامل خروجی روی کد دوبار کلیک کنید):

قالب تمامی دستورات شامل، خواندن تصویر، اعمال تغیرات روی آن و مشخص کردن خروجی است.

در ویندوز تمامی عملیات‌ها با دستور magick  شروع و گاهی لازم است پس از دستور  magick  علمیات مربوطه نیز نوشته شود (لیست دستورات)، اما در لینوکس دستورات با اسم عملیات شروع می‌شوند.

پس توجه داشته باشیم دستورات به فرم magick convert  در لینوکس به صورت convert  استفاده خواهند شد.

همچنین ImageMagick از globbing برای آدرس‌دهی پشتیبانی می‌کند. بنابراین بجای تغییر چندین تصویر بجای دستور حلقه زیر:

از دستور زیر استفاده می‌کنیم:

که مزیت آن علاوه بر سادگی، قابلیت همزمان سازی ImageMagick است که سرعت کار را افزایش می‌دهد.

دستورات

نمایش (Display)

برای نمایش تصویر می‌توان در ویندوز از دستور imdisplay  و در لینوکس از magick display  استفاده کرد.

تبدیل (Convert)

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

همچنین با استفاده از دستور convert  نیز می‌توان فرمت تصویر را تغییر داد و به علاوه این دستور می‌هواند تغییرات دیگری نیز در حین تغییر فرمت بدهد. برای مثال دستور زیر لبه‌های تصویر (که نتیجه اعمال فیلتر canny با سایز کرنل مشخص شده است) را در فایل خروجی ذخیره می‌کند:

canny filter

کاهش کیفیت (Reduce Quality)

از راه‌های فشرده‌سازی تصویر کاهش رزولوشن آن است با دستور زیر می‌توان درصد کیفیت تصویر خروجی را مشخص کرد. اینکار نیز با دستور convert  قابل انجام است:

تغییر سایز (Resize)

برای تغییر سایز تصویر می‌توان از دستور resize استفاده کرد. روش‌های دیگر مشخص کردن سایز خروجی را ببینید.

با استفاده از دستور mogrify نتیجه در خود تصویر ورودی ذخیره می‌شود بنابراین دیگر نیازی به مشخص کردن فایل خروجی نیست.

تصویر مختلط (Collage)

به کمک magick به سرعت و تنها با یک دستور می‌توانیم یک تصویر مختلط از چندین تصویر درست کنیم:

با اجرای خط اول تصویر خروجی کیفیت خوبی نخواهد داشت، دلیل آن مقادیر پیش‌فرض برای geometry  است که برابر ۱۲۰ پیکسل تنظیم شده. در خط دوم با وارد کردن مقدار مورد نظر برای geometry  گفته‌ایم سایز تصاویر تغییر نکنند و سایز حاشیه تصاویر را برابر ۱۰ پیکسل تنظیم کرده‌ایم.

بریدن تصویر (Cropping)

برای بریدن تصویر از طرفین می‌توان از دستور shave  استفاده کنیم:

دستور اول ۱۰ پیکسل از محور x و ۱۰ پیکسل از y از دو سمت تصویر را برش می‌دهد؛ دستور دوم تنها ۱۰ پیکسل از دوسمت محور x تصویر و دستور سوم ۲۰ پیکسل از دو سمت محور y تصویر  را بر می‌دهند.

shave command

برای بریدن ناحیه دلخواه از تصویر باید از دستور crop  استفاده کنیم. آدرس تصویر نوشته شده ( :rose ) آدرس عکس‌های نمونه قابل استفاده شناخته شده توسط magick است که برای تست می‌توان استفاده کرد.

دستور اول عکسی با سایز ۴۰ پیکسل در ۳۰ پیکسل تولید خواهد کرد که از مختصات ۱۰ در ۱۰ تا تصویر برش زده خواهد شد -درواقع برشی به طول ۴۰ پیکسل و عرض ۳۰ پیکسل از مختصات ۱۰ در ۱۰ از تصویر گرفته می‌شود؛ بدیهی است اگر ناحیه برش از تصویر بزرگتر باشد تنها قسمت برش خورده، تصویر خروجی خواهد بود- دستور دوم تصویری خروجی با حداکثر اندازه ۰ پیکسل در ۳۰ پیکسل خواهد داشت که نتیجه برش از مختصات ۴۰ در ۳۰ است، برای دستور سوم نیز تصویری خروجی برابر نتیجه برشی با اندازه ۴۰ پیکسل در ۳۰ از مختصات ۱۰- در ۱۰-  و دستور چهارم، تصویر خروجی ای از نتیجه برش تصویر به مساحت ۹۰ پیکسل در ۶۰ از مختصات ۱۰- در ۱۰- خواهد داشت؛ چون که این ناحیه شامل کل تصویر است تصویر خروجی با ورودی تفاوتی ندارد. در دستور پنجم که عکس خروجی نتیجه برش تصویر از مختصات ۹۰ در ۶۰ با سایز ۴۰ پیکسل در ۳۰ پیکسل خواهد بود، ناحیه برش هیچ قسمتی از عکس را شامل نمی‌شود، بنابراین عکسی خالی خواهد ساخت.

crop

چرخاندن (Rotation)

برای چرخواندن تصویر به صورت زیر عمل می‌کنیم. مقدار مثبت rotate  به معنی چرخش ساعتگرد و مقدار منفی آن به معنی چرخش پادساعتگرد است.:

دستور اول تصویر را ۳۰ درجه ساعتگرد می‌چرخاند. دستور دوم تصویر را ۳۰ درجه ساعتگرد چرخانده و پس‌زمینه ناشی از حذف تصویر را با رنگ تعیین شده پر می‌کند. دستور سوم تصویر را چرخانده و پس‌زمینه آن را حذف می‌کند.

توجه کنید که برای داشتن تصویر بدون پس‌زمینه، به فرمتی آن را ذخیره کنید که از کد رنگ آلفا پشتیبانی کند. برای مثال فرمت png  تصویر بدون پس‌زمینه را به درستی ذخیره می‌کند اما فرمت jpg  تصویر بدون پس‌زمینه را با پس‌زمینه سفید ذخیره می‌کند.

rotate

موارد فوق تنها قسمت کوچکی از توانایی‌های ImageMagick است که شامل متحرک‌سازی، کار به متن‌ها، کار با تصاویر دیجیتال و خام و غیره می‌شود. بنابراین مطالعه مستندات و نمونه موارد استفاده در درک توانایی‌های آن موثرتر خواهد بود.

فوتر سایت

اسلایدر سایدبار

درباره ما

درباره ما

ما گروهی از دانشجویان رشته کامپیوتر دانشگاه شهید رجایی هستیم که به راهنمایی و تدریس استاد علی‌رضا اخوان‌پور به دنیای یادگیری عمیق پا گذاشتیم و دوست داریم چیزهایی که در این مسیر یادمی‌گیریم رو به اشتراک بذاریم.

شبکه های اجتماعی

مطالب اخیر