تصویر آپلود شده در فهرستی از سرور ذخیره می شود و نام تصویر مربوطه در پایگاه داده درج می شود. اما اگر می خواهید تصویری را بدون ذخیره در سرور آپلود کنید، می توان با استفاده از پایگاه داده MySQL این کار را انجام داد. اگر نگران فضای سرور هستید و نیاز به خالی کردن فضای سرور خود دارید، می توانید قرار دادن یک فایل تصویری در پایگاه دادهبدون آپلود آن در دایرکتوری این روش به بهینه سازی فضای سرور کمک می کند زیرا محتوای فایل تصویری به جای سرور در پایگاه داده ذخیره می شود.
در این آموزش به شما نشان خواهیم داد که چگونه این کار را انجام دهید فایل تصویر را در پایگاه داده MySQL ذخیره کنیدو بازیابی تصویر از پایگاه داده با استفاده از PHP... ذخیره و بازیابی تصاویر از پایگاه داده با استفاده از PHP و MySQL بسیار آسان است.
درج فایل تصویری در MySQL
MySQL دارای یک نوع داده BLOB (شیء بزرگ باینری) است که می تواند حجم زیادی از داده های باینری را در خود جای دهد. نوع داده BLOB برای ذخیره داده های تصویر عالی است. در MySQL، چهار نوع BLOB موجود است - TINYBLOB، BLOB، MEDIUMBLOB و LONGBLOB.
برای ذخیره داده های تصویر باید یک جدول در پایگاه داده ایجاد شود. SQL زیر جدول تصاویر را با فیلد نوع داده LONGBLOB در پایگاه داده MySQL ایجاد می کند.
ایجاد جدول `تصاویر` (`id` int (11) NOT NULL AUTO_INCREMENT,` image` longblob NOT NULL, `created` date time NOT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8ci_uni;فرم آپلود تصویر
فرم HTML زیر به کاربران امکان می دهد فایل تصویری را برای آپلود انتخاب کنند.
ذخیره تصویر در پایگاه داده (upload.php)
فایل upload.php شامل قابلیت های زیر است.
- بررسی کنید که آیا کاربر یک فایل تصویری را برای آپلود انتخاب می کند یا خیر.
- محتوای فایل تصویر را با tmp_name بازیابی کنید.
- اتصال به پایگاه داده MySQL را ایجاد کرده و پایگاه داده را انتخاب کنید.
- محتوای باینری تصویر را در جدول تصاویر درج کنید.
$ check = getimagesize ($ _FILES ["تصویر"] ["tmp_name"]);
اگر ($ بررسی کنید! == نادرست) (
$ image = $ _FILES ["تصویر"] ["tmp_name"];
$ imgContent = اسلش اضافه (file_get_contents ($ image)); /*
* داده های تصویر را در پایگاه داده قرار دهید
*/
// جزئیات DB
$ dbUsername = "ریشه";
$ dbPassword = "*****";
$ dbName = "codexworld"؛ $ db = mysqli جدید ($ dbHost، $ dbUsername، $ dbPassword، $ dbName)؛ // بررسی اتصال
اگر ($ db -> connect_error) (
die ("اتصال انجام نشد:". $ db -> connect_error);
) $ dataTime = تاریخ ("Y-m-d H: i: s"); // محتوای تصویر را در پایگاه داده قرار دهید
$ درج = $ db -> پرس و جو ( "درج در تصاویر (تصویر، ایجاد شده) VALUES ("$ imgContent "," $ dataTime ")");
اگر ($ درج کنید) (
echo "فایل با موفقیت آپلود شد." ;
) دیگر (
اکو "آپلود فایل انجام نشد، لطفا دوباره امتحان کنید.";
}
) دیگر (
اکو "لطفا یک فایل تصویری را برای آپلود انتخاب کنید.";
}
}
?>
بازیابی تصویر از پایگاه داده (view.php)
در این فایل محتوای تصویر را از پایگاه داده MySQL بر اساس شناسه و نمایش در صفحه وب بازیابی می کنیم. برای رندر فایل تصویری در صفحه وب، نوع محتواسربرگ استفاده می شود.
اگر (! خالی ($ _ GET ["id"])) (// جزئیات DB
$ dbHost = "localhost";
$ dbUsername = "ریشه";
$ dbPassword = "*****";
$ dbName = "codexworld"; // اتصال ایجاد کنید و DB را انتخاب کنید
$ db = mysqli جدید ($ dbHost، $ dbUsername، $ dbPassword، $ dbName)؛ // بررسی اتصال
اگر ($ db -> connect_error) (
die ("اتصال انجام نشد:". $ db -> connect_error);
} // داده های تصویر را از پایگاه داده دریافت کنید
$ نتیجه = $ db -> پرس و جو ( "انتخاب تصویر از تصاویر WHERE id =($ _GET ["id"]) ")؛ $ نتیجه -> num_rows> 0) (
$ imgData = $ نتیجه -> fetch_assoc ()؛ // رندر تصویر
هدر ("نوع محتوا: تصویر / jpg")؛
echo $ imgData ["تصویر"];
) دیگر (
echo "تصویر یافت نشد ..."؛
}
}
?>
آیا می خواهید کمک پیاده سازی دریافت کنید، یا عملکرد این اسکریپت را اصلاح یا گسترش دهید؟
در چند سال گذشته، میزبانی وب دستخوش تغییرات چشمگیری شده است. خدمات میزبانی وب نحوه عملکرد وب سایت ها را تغییر داده است. انواع مختلفی از خدمات وجود دارد، اما امروز ما در مورد گزینه های موجود برای ارائه دهندگان هاست نمایندگی فروش صحبت خواهیم کرد. آنها میزبانی نمایندگی لینوکس و میزبانی نمایندگی فروش ویندوز هستند. قبل از اینکه تفاوت های اساسی بین این دو را درک کنیم، بیایید دریابیم که میزبانی نمایندگی فروش چیست.
میزبانی نمایندگی فروش
به عبارت ساده، میزبانی فروشنده شکلی از میزبانی وب است که در آن صاحب حساب می تواند از فضای هارد دیسک اختصاص داده شده و پهنای باند اختصاص داده شده خود برای فروش مجدد به وب سایت های اشخاص ثالث استفاده کند. گاهی اوقات، یک فروشنده می تواند یک سرور اختصاصی را از یک شرکت میزبان (لینوکس یا ویندوز) در اجاره بگیرد و سپس آن را در اختیار اشخاص ثالث قرار دهد.
اکثر کاربران وب سایت یا لینوکس یا ویندوز دارند. این مربوط به زمان کار است. هر دو پلتفرم تضمین می کنند که وب سایت شما در 99٪ مواقع بالا است.
1. سفارشی سازی
یکی از تفاوت های اصلی بین هاستینگ پلن توزیع کننده لینوکس و طرح ارائه شده توسط ویندوز در مورد سفارشی سازی است. در حالی که میتوانید با هر دو پلیر به روشهای مختلفی آزمایش کنید، لینوکس بسیار قابل تنظیمتر از ویندوز است. دومی ویژگی های بیشتری نسبت به همتای خود دارد و به همین دلیل است که بسیاری از توسعه دهندگان و مدیران لینوکس را بسیار مشتری پسند می دانند.
2. برنامه های کاربردی
خدمات میزبانی نمایندگی های مختلف، کاربردهای متفاوتی دارند. لینوکس و ویندوز هر دو دارای مجموعه ای از برنامه های کاربردی هستند، اما دومی در مورد اعداد و تطبیق پذیری برتری دارد. این به ماهیت منبع باز لینوکس مربوط می شود. هر توسعه دهنده ای می تواند برنامه خود را بر روی پلتفرم لینوکس آپلود کند و این باعث می شود که آن را به ارائه دهنده میزبانی جذاب برای میلیون ها صاحب وب سایت تبدیل کند.
با این حال، لطفاً توجه داشته باشید که اگر از لینوکس برای میزبانی وب استفاده می کنید اما در عین حال از سیستم عامل ویندوز استفاده می کنید، ممکن است برخی از برنامه ها به سادگی کار نکنند.
3. ثبات
در حالی که هر دو پلتفرم پایدار هستند، میزبانی Reseller Linux از این دو پایدارتر است. این پلتفرم منبع باز است و می تواند در چندین محیط کار کند. این پلتفرم را می توان هر از چند گاهی تغییر و توسعه داد.
4. سازگاری دات نت
اینطور نیست که لینوکس از هر نظر بر ویندوز برتری داشته باشد. وقتی صحبت از سازگاری دات نت می شود، ویندوز توجه را به خود می دزدد. برنامه های کاربردی وب را می توان به راحتی بر روی یک پلت فرم میزبانی ویندوز توسعه داد.
5. مزایای هزینه
هر دو سیستم عامل میزبانی مقرون به صرفه هستند. اما اگر مشکل نقدینگی دارید، باید لینوکس را انتخاب کنید. این رایگان است و به همین دلیل است که توسط بسیاری از توسعه دهندگان و مدیران سیستم در سراسر جهان انتخاب شده است.
6. سهولت در راه اندازی
راه اندازی ویندوز آسان تر از همتای خود است. همه چیزهایی که گفته شد و انجام شد، ویندوز هنوز هم در تمام این سال ها کاربر پسند بودن خود را حفظ کرده است.
7. امنیت
میزبانی نمایندگی لینوکس را انتخاب کنید زیرا از ویندوز ایمن تر است. این امر به ویژه برای افرادی که تجارت الکترونیکی خود را اداره می کنند صادق است.
نتیجه
انتخاب بین این دوبه نیاز شما و انعطاف پذیری هزینه بستگی دارد. هر دو سرویس میزبانی دارای مزایای منحصر به فردی هستند. در حالی که راه اندازی ویندوز آسان است، لینوکس مقرون به صرفه، ایمن و همه کاره تر است.
در ماه مارس امسال، تجربه بسیار بدی با یک شرکت رسانه ای داشتم که از پرداخت پول و پاسخ به ایمیل های من امتناع کرد. آنها هنوز هزاران دلار به من بدهکارند و احساس خشم هر روز در من رخنه می کند. به نظر می رسد که من تنها نیستم، و صدها صاحب وب سایت دیگر در همان قایق هستند. این به نوعی برای دوره تبلیغات دیجیتال همتراز است.
صادقانه بگویم، من مدت زیادی است که این وبلاگ را دارم و در گذشته به شبکه های مختلف تبلیغاتی سر می زدم. پس از حذف واحدهای تبلیغاتی از آن شرکتی که من را سخت کرده بود، دوباره به نقطه اول برگشتم. همچنین باید توجه داشته باشم که من هرگز محصول Googles AdSense را دوست نداشتم، فقط به این دلیل که به نظر می رسد "پایین بشکه" تبلیغات نمایشی است. نه از منظر کیفیت، بلکه از منظر درآمد.
با توجه به آنچه من متوجه شدم، شما می خواهید تبلیغات گوگل را در سایت خود انجام دهید، اما همچنین می خواهید سایر شرکت ها و آژانس های بزرگ نیز این کار را انجام دهند. به این ترتیب تقاضا و درآمد را به حداکثر می رسانید.
پس از تجربه منفی من شرکتی به نام Newor Media را توصیه کردم. و اگر صادقانه بگویم که در ابتدا فروخته نشدم، بیشتر به این دلیل که نمیتوانستم اطلاعات زیادی در مورد آنها پیدا کنم. چند بررسی مناسب در سایتهای دیگر پیدا کردم، و پس از صحبت با کسی در آنجا، تصمیم گرفتم آن را امتحان کنم. من می گویم که آنها فوق العاده مفید هستند. هر شبکه ای که من تا به حال با آنها کار کرده ام از نظر پاسخ و شروع کار با من بسیار کوتاه بوده است. آنها به هر سوالی پاسخ دادند و این یک روند واقعاً دلگرم کننده بود.
من "چند ماه است که تبلیغات را اجرا کرده ام و درآمد تقریباً مطابق با چیزی است که با شرکت دیگر به دست می آوردم. بنابراین نمی توانم واقعاً بگویم که آیا آنها بسیار بهتر از سایرین هستند یا خیر، اما اینکه کجا برجسته می شوند". نکته ای است که من واقعاً می خواهم به آن اشاره کنم. ارتباط با آنها بر خلاف هر شبکه دیگری است که من تا به حال با آن کار کرده ام. در اینجا موردی وجود دارد که آنها واقعاً متفاوت هستند:
آنها اولین پرداخت را به موقع با پی پال به من دادند. اما از آنجا که من "در ایالات متحده نیستم (و این برای همه افراد فکر می کنم اتفاق می افتد)، هزینه ای از Paypal دریافت کردم. در مورد آن به نماینده خود ایمیل زدم و پرسیدم آیا راهی برای جلوگیری از آن در آینده وجود دارد یا خیر.
آنها گفتند که نمی توانند از پرداخت هزینه اجتناب کنند، اما اینکه آنها تمام هزینه ها را بازپرداخت می کنند ... از جمله جدیدترین پرداخت! نه تنها این، بلکه پرداخت بازپرداخت ظرف 10 دقیقه دریافت شد!چه زمانی تا به حال توانسته اید چنین درخواستی را بدون نیاز به ارسال به "بخش مالی" مطرح کنید تا هرگز به آن پاسخ داده نشود.
نکته اصلی این است که من عاشق این شرکت هستم. من ممکن است بتوانم در جای دیگری چیزهای بیشتری به دست بیاورم، "واقعا مطمئن نیستم، اما آنها یک ناشر مادام العمر با من دارند. من سایت بزرگی نیستم و درآمد زیادی ایجاد نمی کنم، اما احساس می کنم یک مشتری بسیار مهمی است که با آنها صحبت می کنم. این واقعاً تنفس هوای تازه در صنعتی است که سرشار از تقلب و عدم پاسخگویی است.
میکروکامپیوترهایی که توسط بنیاد Raspberry Pi در سال 2012 ایجاد شدهاند، در ایجاد سطوح خلاقیت در کودکان بسیار موفق بودهاند و این شرکت مستقر در بریتانیا شروع به ارائه برنامههای استارتآپ یادگیری برای کدنویسی مانند pi-top an Kano کرد. اکنون یک استارت آپ جدید وجود دارد که از الکترونیک Pi استفاده می کند و این دستگاه به نام Pip شناخته می شود، یک کنسول دستی که یک صفحه نمایش لمسی، چندین پورت، دکمه های کنترل و بلندگوها را ارائه می دهد. ایده پشت دستگاه این است که افراد جوان تر را با یک دستگاه بازی که یکپارچهسازی با سیستمعامل است درگیر کند، اما تجربه یادگیری کد را از طریق یک پلت فرم مبتنی بر وب نیز ارائه می دهد.
پلتفرم نرم افزاری شگفت انگیزی که با Pip ارائه می شود، فرصتی را برای شروع کدنویسی در Python، HTML / CSS، JavaScript، Lua و PHP ارائه می دهد. این دستگاه آموزش های گام به گامی را برای شروع برنامه نویسی به کودکان ارائه می دهد و به آنها اجازه می دهد حتی LED ها را فلاش کنند. در حالی که Pip هنوز یک نمونه اولیه است، مطمئناً موفقیت بزرگی در صنعت خواهد داشت و کودکانی را که به کدنویسی علاقه دارند درگیر خواهد کرد و آموزش و منابع مورد نیاز برای شروع کدنویسی در سنین پایین را برای آنها فراهم می کند.
آینده کدنویسی
برنامه نویسی آینده بسیار خوبی دارد و حتی اگر کودکان از کدنویسی به عنوان شغل استفاده نکنند، می توانند از یادگیری نحوه کدنویسی با این دستگاه جدید که کار را آسان تر از همیشه می کند، بهره مند شوند. با Pip، حتی جوانترین علاقهمندان به برنامهنویسی زبانهای مختلف را یاد میگیرند و در راه ایجاد کدهای خود، بازیهای خود، برنامههای شخصی و موارد دیگر خواهند بود. این آینده عصر الکترونیک است و Pip اجازه می دهد تا بلوک های سازنده اساسی کدنویسی تسلط یابد.علوم کامپیوتر به بخش مهمی از آموزش تبدیل شده است و با دستگاه هایی مانند Pip جدید، کودکان می توانند همزمان با سرگرمی، آموزش خود را در خانه تقویت کنند. کدنویسی بسیار فراتر از ایجاد وب سایت یا نرم افزار است. می توان از آن برای افزایش ایمنی در یک شهر، برای کمک به تحقیقات در زمینه پزشکی و موارد دیگر استفاده کرد. از آنجایی که ما اکنون در دنیایی زندگی می کنیم که تحت تسلط نرم افزار است، برنامه نویسی آینده است و برای همه کودکان مهم است که حداقل درک اولیه از نحوه کارکرد آن داشته باشند، حتی اگر هرگز از این مهارت ها به عنوان شغل استفاده نکنند. از نظر آینده، کدگذاری جزء حیاتی زندگی روزمره خواهد بود. این زبان دنیا خواهد بود و ندانستن رایانه یا نحوه کار آنها می تواند چالش هایی را ایجاد کند که غلبه بر آنها به همان اندازه بی سوادی دشوار است.
برنامه نویسی همچنین تغییرات عمده ای را در دنیای بازی ایجاد می کند، به خصوص در مورد بازی های آنلاین، از جمله دسترسی به کازینوهای آنلاین. برای اینکه ببینید چگونه کدنویسی قبلاً دنیای بازی را بهبود بخشیده است، نگاهی به چند سایت کازینو دارای رتبه برتر که به کدنویسی متکی هستند بیندازید. نگاهی سریع به آن بیندازید و ببینید که چگونه برنامه نویسی می تواند محیط های واقعی را به صورت آنلاین ارائه دهد.
چگونه پیپ کودکان را درگیر می کند
وقتی نوبت به فرصت یادگیری کدنویسی می رسد، کودکان گزینه های زیادی دارند. تعدادی دستگاه و ابزار سخت افزاری وجود دارد که می توان آنها را خریداری کرد، اما Pip رویکرد متفاوتی را در مورد دستگاه خود اتخاذ می کند. قابل حمل بودن دستگاه و صفحه نمایش لمسی مزیتی برای سایر دستگاه های کدنویسی موجود در بازار دارد. Pip علاوه بر سیستم Raspberry Pi HAT با قطعات الکترونیکی کاملاً سازگار خواهد بود. این دستگاه از زبان های استاندارد استفاده می کند و دارای ابزارهای اولیه است و برای هر کدنویس مبتدی یک دستگاه عالی است. هدف این است که هر گونه مانع بین ایده و خلقت را از بین ببرید و ابزارها را فوراً برای استفاده در دسترس قرار دهید. یکی از مزایای بزرگ دیگر Pip این است که از کارت SD استفاده می کند، بنابراین می توان از آن به عنوان یک کامپیوتر رومیزی و در صورت اتصال به مانیتور و ماوس استفاده کرد.دستگاه Pip به بچه ها و مبتدیان علاقه مند به کدنویسی با اشتیاق در یادگیری و تمرین کدنویسی کمک می کند. با ارائه ترکیبی از تکمیل کار و سرهم بندی برای حل مشکلات، دستگاه مطمئناً نسل جوان را درگیر خواهد کرد. سپس این دستگاه به این کدنویسهای جوان اجازه میدهد تا به سطوح پیشرفتهتری از کدنویسی در زبانهای مختلف مانند جاوا اسکریپت و HTML / CSS حرکت کنند. از آنجایی که این دستگاه یک کنسول بازی را تکرار می کند، بلافاصله توجه کودکان را به خود جلب می کند و آنها را درگیر یادگیری کدنویسی در سنین پایین می کند. همچنین با برخی از بازی های از پیش بارگذاری شده برای حفظ توجه ارائه می شود، مانند Pac-Man و Minecraft.
نوآوری های آینده
نوآوری آینده تا حد زیادی به توانایی فعلی کودک در کدنویسی و درک کلی آنها از فرآیند بستگی دارد. همانطور که کودکان در سنین پایین با استفاده از دستگاه هایی مانند Pip جدید کدنویسی را یاد می گیرند، مهارت ها و دانش لازم برای ایجاد چیزهای شگفت انگیز را در آینده به دست خواهند آورد. این میتواند معرفی بازیها یا برنامههای جدید یا حتی ایدههایی باشد که میتوانند برای کمک به تحقیقات و درمانهای پزشکی جان بگیرند. امکانات بی پایانی وجود دارد. از آنجایی که آینده ما توسط نرم افزار و کامپیوتر کنترل خواهد شد، شروع جوانی بهترین راه است، به همین دلیل است که Pip جدید برای جمعیت جوان طراحی شده است. اعضای جوان جامعه با ارائه یک دستگاه کنسولی که می تواند همزمان با آموزش مهارت های کدنویسی بازی کند، به خوبی در راه تبدیل شدن به نرم افزارهایی هستند که در آینده زندگی ما را تغییر خواهد داد. این تازه شروع است، اما چیزی است که میلیون ها کودک در سراسر جهان شروع به یادگیری و تسلط بر آن کرده اند. با استفاده از دستگاههایی مانند Pip، اصول برنامهنویسی پوشش داده میشود و کودکان به سرعت زبانهای مختلف کدنویسی را یاد میگیرند که میتوانند مسیرهای شگفتانگیزی را با ورود به بزرگسالی هدایت کنند.آخرین ویرایش در 24 فوریه 2017 توسط وینسی انجام شد.
هنگام نمایش تصاویر برای وب سایت های ما، مهم است که اطمینان حاصل کنیم که می تواند در محدوده طرح بندی ما تنظیم شود. اگر نه، باید اندازه این تصاویر را بر این اساس تغییر دهیم. در PHP، تغییر اندازه یک تصویر، با استفاده از مجموعه ای از توابع PHP برای ایجاد یک تصویر جدید از ابتدا، با ابعاد داده شده، که در آن انتظار می رود اندازه تصویر اصلی تغییر اندازه داده شود، به دست می آید.
بنابراین، ترکیبی از این توابع برای به دست آوردن مراحل زیر استفاده می شود که منجر به تغییر اندازه تصویر موفق از طریق برنامه نویسی PHP می شود.
- شناسه تصویر را برای تصویر منبع دریافت کنید.
- شناسه منبع برای لایه تصویر هدف را دریافت کنید.
- تغییر اندازه و مونتاژ مجدد.
- تصویر تغییر اندازه را در مکان مورد نظر ذخیره کنید.
شناسه منبع تصویر را برای تصویر منبع دریافت کنید
برای کار بر روی فایل تصویری داده شده برای تغییر اندازه، باید شناسه منبع را برای مرجع دریافت کنیم، همانطور که پس از دریافت منبع فایل، یا مانند، گرفتن دسته دایرکتوری برای اجرا، انجام دادیم.
در PHP، توابع مختلفی برای دریافت شناسه منبع فایل تصویری وجود دارد. این توابع به طور مناسب بر اساس نوع تصویر داده شده برای تغییر اندازه استفاده می شوند. مثلا، imagecreatefromjpeg (), imagecreatefromgif (), imagecreatefrompng ()، برای دریافت شناسه منبع برای تصاویر JPEG، GIF و PNG استفاده می شود.
در این مرحله ابتدا باید با استفاده از تابع PHP نوع تصویر را بدست آوریم گرفتن تصویر ()، که برای دریافت لیست کاملی از ویژگی های تصویر، از جمله عرض، ارتفاع و غیره استفاده می شود. پس از آن، می توانیم یک تابع مناسب برای دریافت شناسه منبع اعمال کنیم. همه این توابع PHP که برای بدست آوردن ویژگی های تصویر و دریافت اطلاعات منبع فایل تصویری مورد انتظار نام یا مسیر فایل تصویر هستند استفاده می شود. مثلا،
$ file = "christmas.jpg"; $ source_properties = getimagesize (فایل $); $ image_type = $ source_properties; if ($ image_type == IMAGETYPE_JPEG) ($ image_resource_id = imagecreatefromjpeg ($ file);) elseif ($ image_type == IMAGETYPE_GIF) ($ image_resource_id = imagecreatefromgif ($ file); elseNGif ($ image_type == IMatefAGET)ng ))
موارد استفاده شده در عبارات شرطی با مقدار صحیح مناسب از پیش تعریف شده اند که نشان دهنده نوع تصویر است. مثلا، IMAGETYPE_JPEGبا مقدار 2 تعریف می شود که برای نشان دادن تصویر JPEG استفاده می شود.
دریافت شناسه منبع برای لایه تصویر هدف
پس از دریافت شناسه منبع مرجع از فایل تصویر منبع، باید یک تصویر جدید به عنوان لایه هدف ایجاد کنیم. این تصویر با ابعادی که انتظار می رود اندازه تصویر اصلی تغییر کند ایجاد می شود.
تابع داخلی PHP، با نام، imagecreatetruecolor ()برای این منظور با پذیرش ابعاد مورد نیاز یعنی عرض و ارتفاع تصویر مورد نظر استفاده می شود. مثلا،
$ target_width = 200; $ target_height = 200; $ target_layer = imagecreatetruecolor ($ target_width، $ target_height).
imagecreatetruecolor ()تابع تصویر خالی ایجاد می کند. علاوه بر آن، شناسه داده منبع را به عنوان یک مرجع به تصویر جدید ایجاد شده با پارامتر عرض و ارتفاع مشخص برمی گرداند. این مرجع در مراحلی برای ذکر هدف مورد استفاده قرار می گیرد که در بالای بعدی آن تصویر تغییر اندازه جمع می شود.
تغییر اندازه و مونتاژ مجدد
برای این مرحله، باید فهرستی از جزئیات مربوط به منبع و تصویر هدف را که در فرآیند تغییر اندازه تصویر استفاده میشوند، ارائه کنیم. اینها هستند،
- شناسه منبع لایه هدف و منبع
- ابعاد برای نشان دادن عرض و ارتفاع تصویر اصلی و لایه تصویر هدف.
با استفاده از این جزئیات ارائه شده، بخش مورد نیاز از تصویر اصلی کپی شده و دوباره روی لایه هدف جمع می شود. برای آن، تابع PHP، با نام، imagecopyresampled ()برای چنین فرآیند تغییر اندازه و مونتاژ مجدد. مثلا،
Imagecopyresampled ($ target_layer, $ image_resource_id, 0,0,0,0, $ target_width, $ target_height, $ source_properties, $ source_properties);
در این نمونه کد، که در بالا نشان داده شده است، برخی از آرگومان های این تابع با مقدار 0 ارسال می شوند. این آرگومان ها، در واقع، به ترتیب مختصات x، y تصویر هدف و منبع را نشان می دهند.
این آرگومان ها حاوی مقادیری برای برش بخشی از تصویر منبع خواهند بود. در غیر این صورت، نیازی به ذکر نقاط x، y نیست، به این معنی که کل تصویر برش داده می شود تا ظاهر آن به جز ابعادش حفظ شود.
توجه داشته باشید:یک تابع PHP معادل وجود دارد imagecopyresized ()مثل مثل imagecopyresampled ()، درحالی که imagecopyresampled ()عملکرد نسبتاً تصویر را با کیفیت بیشتری تغییر اندازه می دهد.
تصویر تغییر اندازه را در مکان هدف ذخیره کنید
در نهایت، زمان ذخیره تصویر تغییر اندازه در محل مورد نظر است. برای آن باید جزئیات زیر را مشخص کنیم.
- شناسه منبع لایه تصویر تغییر اندازه.
- نام یا مکان تصویر را هدف بگیرید.
اکنون میتوانیم از نمونه کدی که در زیر نشان داده شده است استفاده کنیم تا لایه تصویر تغییر اندازه داده شود.
Imagejpeg ($ target_layer، "christmas_thump.jpg");
نمونه کد نشان داده شده در هر مرحله فقط برای تصویر JPEG قابل استفاده است. با استفاده از توابع مناسب PHP میتوانیم همان را برای انواع دیگر تصاویر تکرار کنیم.
مثال: تغییر اندازه تصویر PHP
این مثال نحوه تغییر اندازه هر نوع فایل تصویری آپلود شده از فرم HTML را نشان می دهد. بنابراین، اسکریپت PHP که در زیر نشان داده شده است، فایل تصویر آپلود شده را برای تغییر اندازه کنترل می کند.
و کد HTML که شامل محفظه فرم برای آپلود فایل تصویری است،
احتمالاً از خود پرسیده اید که "این اعداد چیست و راه من به سمت تصویر کجاست؟" 🙂 بیایید نگاهی به چند نمونه از نحوه کار با این بیاندازیم.
چگونه می توان مسیر کامل یک عکس را در Bitrix پیدا کرد
وقتی در مورد اخبار یا محصولات صحبت می کنیم معمولاً به فایل های تصویری نیاز داریم. برای چنین فیلدهایی، به عنوان یک قاعده، ویژگی های عنصر " عکس برای اطلاعیه"و" تصویر تفصیلی". گاهی اوقات، ویژگی های بلوک اطلاعات ایجاد می شود، نوع این ویژگی یک فایل است و برای تصاویر اضافی (مثلاً گالری محصول) استفاده می شود. کل مشکل این است که Bitrix بلافاصله یک مسیر آماده به فایل تصویر یا کپی کاهش اندازه آن را به شما نمی دهد.
من به شما توصیه می کنم ابتدا یک مقاله کوتاه در مورد نمایش عناصر در یک صفحه بخوانید. در ادامه با کد مشابهی مواجه خواهیم شد.
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (Array("ID" =>"ASC")، آرایه ("IBLOCK_ID" => $ iblock_id)، غلط، نادرست، آرایه ("ID"، "NAME"، "DETAIL_PAGE_URL"، "PREVIEW_PICTURE"، "DETAIL_PICTURE")); در حالی که ($ ar_fields = $ my_elements-> GetNext ()) (echo $ ar_fields ["PREVIEW_PICTURE"]."
";) endif;؟>
و در واقع، همه چیز به درستی انجام شد، ما یک "کد تصویر"، یک شناسه فایل منحصر به فرد خاص دریافت کردیم که با آن می توانیم داده ها را دریافت کنیم.
1C-Bitrix یک کلاس دارد CFile- که برای کار با فایل ها و تصاویر استفاده می شود. از آن استفاده خواهیم کرد روش GetPathو با استفاده از مثال تصویر برای اعلام، مسیر کامل تصویر را دریافت خواهیم کرد (برای جزئیات، همه چیز یکسان است):
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (Array("ID" =>"ASC")، آرایه ("IBLOCK_ID" => $ iblock_id)، غلط، نادرست، آرایه ("ID"، "NAME"، "DETAIL_PAGE_URL"، "PREVIEW_PICTURE"، "DETAIL_PICTURE")); در حالی که ($ ar_fields = $ my_elements->
"؛ $ img_path = CFile :: GetPath ($ ar_fields [" PREVIEW_PICTURE "]؛ echo $ img_path."
";) endif;؟>
حالا خروجی می دهد:
/upload/iblock/c2a/c2a29aad47791f81f6fa8fd038d83789.jpg /upload/iblock/35e/35e000d0e7c3a94b32fb086c627f87eb.jpg / آپلود / iblock / 088 / 08847400f3c59cae2871cf97jpg
عالی، این چیزی است که شما نیاز دارید. اکنون می توانیم از تگ img HTML برای تعیین مسیر تصویر استفاده کنیم. خط ما را با اکو تغییر دهید
اکو "
";
نحوه تغییر اندازه تصاویر در Bitrix یا انجام تغییر اندازه
قبل از ایجاد یک پروژه یا یک بلوک اطلاعاتی جدید، همیشه فکر کنید " تصاویر من باید چه اندازه باشند". این بسیار مهم است زیرا اگر کاهش تصویر را پس از بارگیری در بلوک اطلاعات، تولید تصویر اعلامیه از جزئیات (در صورت لزوم) و سایر پارامترها پیکربندی نکنید، اندازه صفحه شما ممکن است از چندین مگابایت (و در موارد بسیار نادر حتی) تجاوز کند. بیش از 10 مگابایت 🙂).
در واقع، وقتی تصویر را با استفاده از CSS به شدت اندازه میدهید، تصویر همچنان در اندازه کامل بارگیری میشود و مواردی مانند این کار نمیکنند:
// HTML // CSS .my-prev-image (عرض: 200 پیکسل؛ ارتفاع: 200 پیکسل؛)
این مشکل ما را با اندازه تصویر اصلی در صفحه حل نمی کند و تنها قوانین معتبر، به نظر من، ممکن است حداکثر عرضو حداکثر ارتفاع.
بیایید موردی را در نظر بگیریم که قبلاً تصاویر بزرگی داریم و می خواهیم کپی های کاهش یافته آنها را دریافت کنیم. روش به ما کمک خواهد کرد CFile :: ResizeImageGet... مزیت آن این است که وقتی صفحه را راه اندازی می کنیم، تصاویر را در پوشه ایجاد می کند / آپلود / resize_cache / مسیر- و اگر چنین تصویری از قبل وجود داشته باشد، به طور خودکار مسیر آن را به ما باز می گرداند. علاوه بر این، ما می توانیم هر اندازه، کیفیت و حتی نوع مقیاس بندی تصویر را تنظیم کنیم.
اینها انواعی هستند که در دسترس ما هستند ( اطلاعات گرفته شده از اسناد رسمی Bitrix):
- BX_RESIZE_IMAGE_EXACT - مقیاس به یک مستطیل $ arSize با حفظ نسبت ها، قطع کردن اضافی.
- BX_RESIZE_IMAGE_PROPORTIONAL - مقیاس با حفظ تناسب، اندازه به $ arSize محدود می شود.
- BX_RESIZE_IMAGE_PROPORTIONAL_ALT - مقیاس با حفظ تناسبات، اندازه به arSize $ محدود شده است، مدیریت بهتر تصاویر عمودی.
بیایید سعی کنیم با استفاده از ResizeImageGet تصاویر خود را کاهش دهیم:
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (Array("ID" =>"ASC")، آرایه ("IBLOCK_ID" => $ iblock_id)، غلط، نادرست، آرایه ("ID"، "NAME"، "DETAIL_PAGE_URL"، "PREVIEW_PICTURE"، "DETAIL_PICTURE")); در حالی که ($ ar_fields = $ my_elements-> GetNext ()) (// echo $ ar_fields ["PREVIEW_PICTURE"]."
"; // $ img_path = CFile :: GetPath ($ ar_fields [" PREVIEW_PICTURE "]؛ $ img_resize_path = CFile :: ResizeImageGet ($ ar_fields [" PREVIEW_PICTURE "]، آرایه (" عرض "=>" 100 "، ارتفاع "=>" 150 ")، BX_RESIZE_IMAGE_PROPORTIONAL؛ // echo"
"; print_r ($ img_resize_path); echo""؛ پژواک"
";) endif;؟>
$ img_resize_path ['src']- امیدوارم متوجه شده باشید که این روش یک آرایه را به ما برمی گرداند و ما فقط نیاز داریم src.
بیایید به ترتیب تجزیه و تحلیل کنیم:
$ ar_زمینه های ["پیش نمایش_تصویر "]- فیلد برای کد فایل (برای کد دقیق، به $ ar_fields ["DETAIL_PICTURE"] تغییر دهید.
آرایه ('عرض '=>' 100 ', 'ارتفاع '=>' 150 ') -ابعاد تصویر نهایی (یا arSize فوق الذکر)،
BX_RESIZE_IMAGE_متناسب -نوع پوسته پوسته شدن که تصاویر ما در مورد آن از مرزهای مشخص شده خارج نمی شوند .
مستندات رسمی این روش دارای توضیحات مفصلی است، علاوه بر این، 4 پارامتر دیگر را که ما در اینجا استفاده نکردیم، توضیح می دهد ( InitSizes، فیلترها، فوری، کیفیت jpg) .
پس از اینکه شما یا کاربرانتان دارایی های تصویر را در Cloudinary آپلود کردید، می توانید آنها را از طریق URL های پویا تحویل دهید. میتوانید دستورالعملهایی را در URLهای پویا اضافه کنید که به Cloudinary میگویند با استفاده از مجموعهای از پارامترهای تبدیل، داراییهای شما را دستکاری کند. همه دستکاریها بهطور خودکار در فضای ابری انجام میشوند و داراییهای تبدیلشده شما قبل از اینکه از طریق یک CDN سریع به کاربر نهایی برای تجربه کاربری بهینه هدایت شوند، بهطور خودکار بهینهسازی میشوند.
به عنوان مثال، می توانید اندازه و برش را تغییر دهید، تصاویر همپوشانی اضافه کنید، چهره ها را محو یا پیکسل کنید، طیف وسیعی از جلوه های ویژه و فیلترها را اعمال کنید و تنظیماتی را برای بهینه سازی تصاویر خود و ارائه آنها به صورت واکنشگرا اعمال کنید.
کتابخانه PHP Cloudinary تولید URL های تبدیل را برای جاسازی آسان دارایی ها در برنامه PHP شما ساده می کند.
ارائه و تبدیل تصاویر
میتوانید تصاویر خود را با استفاده از روشهایی که برچسبهای تصویر تولید میکنند یا از طریق دستورالعملهای ساخت URL مستقیم تحویل دهید.
روش cl_image_tag
شما می توانید تصاویر را با استفاده از روش کمکی cl_image_tag Cloudinary به نمای PHP خود اضافه کنید. این روش URL منبع تصویر کامل را بر اساس پارامترهای تبدیل داده شده ایجاد می کند و تگ تصویر را به کد HTML شما اضافه می کند:
cl_image_tag ( "نمونه");
کد بالا تگ تصویر HTML زیر را ایجاد می کند:
" https: //res.site/demo/image/upload/sample" >
شما همچنین می توانید پارامترهای تبدیل را در درخواست اضافه کنید، به عنوان مثال، برای ارائه یک تصویر JPEG با عرض 400 پیکسل:
cl_image_tag ( "sample.jpg"، آرایه ( "عرض" => 400 , "زراعت" => "پد"));
میتوانید تبدیلها را مستقیماً به متد cl_image_tag خود اضافه کنید (همه تبدیلها در یک مؤلفه مسطح و منفرد از منبع URL حاصل، مانند بالا خواهند بود)، یا میتوانید آنها را با پارامتر تبدیل تعریف کنید.
cl_image_tag ( "sample.jpg"، آرایه ( "دگرگونی"=> آرایه ( "عرض" => 400 , "زراعت" => "پد")));
دگرگونی های زنجیره ای
Cloudinary از تحولات قدرتمند پشتیبانی می کند. شما حتی می توانید چندین تبدیل را با هم به عنوان بخشی از یک درخواست تبدیل واحد ترکیب کنید، به عنوان مثال. یک تصویر را برش داده و یک حاشیه اضافه کنید. در موارد خاصی ممکن است بخواهید تغییر شکل های اضافی را در نتیجه درخواست تبدیل قبلی انجام دهید. برای انجام این کار، می توانید از تبدیل های زنجیره ای استفاده کنید.
برای اعمال تبدیلهای زنجیرهای در URL تبدیل، چندین مؤلفه تبدیل را اضافه میکنید که با «/» از هم جدا شدهاند. هر جزء تبدیل به نتیجه مولفه قبلی اعمال می شود. در PHP اعمال تبدیل های متعدد با تعیین پارامتر تبدیل به عنوان آرایه ای از آرایه های تبدیل انجام می شود. مثال زیر ابتدا تصویر اصلی را به مجموعه خاصی از مختصات سفارشی برش می دهد و سپس نتیجه را تبدیل می کند تا یک مستطیل 130x100 را پر کند:
cl_image_tag ( "brown_sheep.jpg"، آرایه ( "دگرگونی"=> آرایه (آرایه ( "ایکس"=>355 , "ی"=>410 , "عرض"=>300 , "قد"=>200 , "زراعت"=>"زراعت")، آرایه ( "عرض"=>130 , "قد"=>100 , "زراعت"=>"پر کردن"))))
مثال زیر 4 تغییر زنجیره ای را اعمال می کند: برش سفارشی به 300x200، پر کردن به 130x100، چرخش 20 درجه و سپس مقیاس تا 50٪:
cl_image_tag ( "brown_sheep.jpg"، آرایه ( "دگرگونی"=> آرایه (آرایه ( "ایکس"=>355 , "ی"=>410 , "عرض"=>300 , "قد"=>200 , "زراعت"=>"زراعت")، آرایه ( "عرض"=>130 , "قد"=>100 , "زراعت"=>"پر کردن")، آرایه ( "زاویه"=> 20)، آرایه ( "عرض"=>0.5 , "زراعت"=>"مقیاس"))))
برای اطلاعات بیشتر در مورد تبدیل تصویر، نگاه کنید.
ساخت URL مستقیم
روش cl_image_tag که در بالا توضیح داده شد یک تگ تصویر HTML ایجاد می کند. در شرایط خاص، ممکن است بخواهید مستقیماً یک URL تبدیل بدون تگ تصویر ایجاد کنید. برای برگرداندن فقط URL، یا از روش کمکی view cloudinary_url استفاده کنید. در اینجا چند نمونه آورده شده است:
cloudinary_url ( "sample.jpg"، آرایه ( "عرض" => 100 , "قد" => 150 , "زراعت" => "پر کردن"))؛ // خروجی: "https: //res..jpg"
cloudinary_url ( "sample_spreadsheet.xls"، آرایه ( "نوع_منبع" => "خام"))؛ // خروجی: "https: //res..xls"
تغییرات رایج تصویر را اعمال کنید
این بخش یک نمای کلی و نمونه هایی از ویژگی های متداول تبدیل تصویر زیر را به همراه پیوندهایی به مستندات دقیق تر در مورد این ویژگی ها ارائه می دهد:
به خاطر داشته باشید که این بخش فقط به منظور آشنایی شما با اصول استفاده از تبدیل تصویر با PHP است.
برای توضیحات جامع در مورد نحوه اجرای طیف گسترده ای از تبدیل ها، تبدیلات تصویر را ببینید. برای فهرست کامل همه تبدیلهای تصویر پشتیبانی شده و استفاده از آنها، به مرجع تبدیل تصویر مراجعه کنید.
تغییر اندازه و برش
روشهای مختلفی برای تغییر اندازه و/یا برش تصاویر و کنترل ناحیهای از تصویر که در طول برش حفظ میشود، وجود دارد.
مثال زیر از روش برش پر برای تولید و ارائه تصویری استفاده می کند که به طور کامل اندازه 250x250 درخواستی را پر می کند و در عین حال نسبت تصویر اصلی را حفظ می کند. از گرانش تشخیص چهره استفاده می کند تا اطمینان حاصل شود که تمام چهره های تصویر در هنگام برش دادن تصویر حفظ و در مرکز قرار می گیرند:
تصویر اصلی برش را با جاذبه "چهره" پر کنید
برای جزئیات بیشتر در مورد همه گزینههای تغییر اندازه و برش، رجوع کنید
تبدیل به فرمت تصویر دیگر
شما می توانید هر تصویری را که در Cloudinary آپلود شده است در اصل با هر فرمت تصویری تحویل دهید. 3 روش اصلی برای تبدیل و تحویل در قالب دیگری وجود دارد:
- تعیین شناسه عمومی تصویر با پسوند مورد نظر.
- با استفاده از پارامتر fetch_format فرمت مورد نظر را به صراحت تنظیم کنید.
- از fetch_format خودکار استفاده کنید تا به Cloudinary دستور دهید تا تصویر را در بهینهترین قالب برای هر مرورگری که آن را درخواست میکند، ارائه دهد.
یک فایل jpg را با فرمت .gif تحویل دهید:
اجازه دهید Cloudinary فرمت بهینه را برای هر مرورگر انتخاب کند. به عنوان مثال، در کروم، این تصویر در قالب .webp ارائه می شود.
میتوانید از میان مجموعهای وسیع از جلوههای تصویر، پیشرفتها و فیلترها را برای اعمال بر روی تصاویر خود انتخاب کنید. افکتهای موجود شامل انواع افکتهای تعادل رنگ و سطح، رنگآمیزی، محو کردن، پیکسلسازی، شفافسازی، جلوههای بهبود خودکار، فیلترهای هنری، پوششهای تصویر و متن، افکتهای تغییر شکل و تغییر شکل، خطوط کلی، پسزمینه، سایهها و موارد دیگر است.
برای مثال، کد زیر یک افکت کارتونی، جلوه گوشههای گرد و جلوه رنگ پسزمینه را اعمال میکند (و سپس تصویر را تا ارتفاع 300 پیکسل کاهش میدهد).
cl_image_tag ( "actor.jpg"، آرایه ( "دگرگونی"=> آرایه (آرایه ( "اثر"=>"کاریکاتور کردن")، آرایه ( "شعاع"=>"حداکثر")، آرایه ( "اثر"=>"طرح کلی: 100", "رنگ"=>"آبی کمرنگ")، آرایه ( "زمینه"=>"آبی کمرنگ")، آرایه ( "قد"=>300 , "زراعت"=>"مقیاس"))))
برای جزئیات بیشتر در مورد جلوه ها و فیلترهای تصویر موجود، به اعمال جلوه ها و فیلترهای تصویر مراجعه کنید
افزودن همپوشانی متن و تصویر
می توانید تصاویر و متن را به عنوان پوشش روی تصویر اصلی خود اضافه کنید. میتوانید همان نوع تبدیلها را روی تصاویر همپوشانی خود اعمال کنید که میتوانید با هر تصویری و میتوانید از تنظیمات گرانش یا مختصات x و y برای کنترل مکان پوششها استفاده کنید. همچنین میتوانید تغییرات مختلفی را روی متن اعمال کنید، مانند رنگ، فونت، اندازه، چرخش و موارد دیگر.
برای مثال، کد زیر عکس یک زوج را روی یک عکس لیوان میپوشاند. عکس روی هم با استفاده از تشخیص چهره با اشباع رنگ تنظیمشده و جلوهای رنگی برش داده میشود. کلمه عشق با فونت صورتی و فانتزی اضافه میشود و به تناسب آن چرخانده میشود. طرح، گرافیک بادکنکی نیز اضافه شده است، علاوه بر این، تصویر نهایی برش داده شده و گوشه ها گرد می شوند.
cl_image_tag ( "coffee_cup.jpg"، آرایه ( "دگرگونی"=> آرایه (آرایه ( "عرض"=>400 , "قد"=>250 , "جاذبه زمین"=>"جنوب", "زراعت"=>"پر کردن")، آرایه ( "پوشش"=>"زوج_خوب", "عرض"=>1.3 , "قد"=>1.3 , "جاذبه زمین"=>"چهره ها", "پرچم ها"=>"region_relative", "زراعت"=>"زراعت")، آرایه ( "اثر"=>"اشباع: 50")، آرایه ( "اثر"=>"وینیت")، آرایه ( "پرچم ها"=>"layer_apply", "عرض"=>100 , "شعاع"=>"حداکثر", "جاذبه زمین"=>"مرکز", "ی"=>20 , "ایکس"=>-20 , "زراعت"=>"مقیاس")، آرایه ( "پوشش"=>"بالون", "قد"=> 55)، آرایه ( "اثر"=>"رنگ: -20", "زاویه"=> 5)، آرایه ( "پرچم ها"=>"layer_apply", "ایکس"=>30 , "ی"=> 5)، آرایه ( "پوشش"=> آرایه ( "font_family"=>"کوکی", "اندازه فونت"=>40 , "Font_weight"=>"پررنگ", "متن"=>"عشق"), "اثر"=>"رنگ آمیزی", "رنگ"=>"# f08")، آرایه ( "زاویه"=>20 , "پرچم ها"=>"layer_apply", "ایکس"=>-45 , "ی"=> 44)، آرایه ( "عرض"=>300 , "قد"=>250 , "ایکس"=>30 , "زراعت"=>"زراعت")، آرایه ( "شعاع"=>60 ))))
برای بررسی عمیق روش های بسیاری که می توانید تصاویر خود را بهینه کنید، به بهینه سازی تصویر مراجعه کنید
تنظیمات تصویر واکنشگرا
طراحی وب ریسپانسیو روشی برای طراحی وبسایتها است تا تجربهای بهینه از مشاهده را به کاربران ارائه دهد، صرف نظر از دستگاه، اندازه پنجره، جهت یا وضوح مورد استفاده برای مشاهده آن. اطمینان از تجربه بهینه به این معنی است که باید از ارسال تصاویر با وضوح بالا که در سمت مشتری تغییر اندازه مییابند، با اتلاف پهنای باند قابل توجه برای کاربران نمایشگرهای کوچک خودداری کنید. درعوض، همیشه باید تصویر اندازه مناسب را برای هر دستگاه و اندازه صفحه نمایش ارائه دهید.
به عنوان مثال، میتوانید اطمینان حاصل کنید که هر کاربر با استفاده از مقدار خودکار برای ویژگیهای dpr و عرض، تصاویری را با اندازه و نسبت پیکسل دستگاه (dpr) که متناسب با دستگاهش است دریافت میکند. مقدار خودکار با مقادیر واقعی در سمت مشتری بر اساس تنظیمات واقعی مرورگر و عرض پنجره جایگزین می شود:
cl_image_tag ( "عکس من"، آرایه ( "دگرگونی"=> آرایه (آرایه ( "dpr" => "خودکار", "پاسخگو"=> درست، "عرض" => "خودکار", "زراعت" => "مقیاس", "زاویه"=> 20)، آرایه ( "اثر" => "هنر: هوکوسای", " : " مرز " => " 3 px_solid_rgb: 00390 ب ""شعاع " => 20))));
Cloudinary چندین گزینه برای ساده کردن پیچیدگی ارائه تصاویر پاسخگو ارائه می دهد. برای راهنمایی دقیق در مورد نحوه اجرای این گزینه ها، نگاه کنید