فشرده سازی تصاویر به کمک PHP
#1
به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
حتماً براتون پیش اومده که فایل تصویری رو در هاست یا سرورتون بخواین آپلود کنین ولی نگران این باشین که فضایی که شرکت هاستینگ بهتون ارائه داده پر بشه. درسته که عموماً تصاویر حجم شاخصی ندارن ولی برای هاست یا سرورهایی که تنها چند مگ ظرفیت ذخیره سازی دارن این موضوع بسیار حیاتیه. به همین منظور امروز قصد داریم کد فشرده سازی تصاویر رو در PHP با هم بررسی کنیم.
اما کد به این شرحه:
کد php:
<?php
/**
 * @author Master Badfar
 * @copyright 2020
 */
 // صدور مجوز برای درخواست AJAX
header('Access-Control-Allow-Origin: *');    
 
// قطع نمایش خطاهای مفسر PHP
ini_set('display_errors'0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
 
// تعریف متغیر میزان ارور
 
$error 0;
// تعریف فانکشن فشرده سازی تصویر
function compress($source$destination$quality) {
// دریافت حجم تصویر
    
$info getimagesize($source);
// تبدیل فرمت های مختلف تصویری به jpeg
    
if ($info['mime'] == 'image/jpeg'
        
$image imagecreatefromjpeg($source);

    elseif (
$info['mime'] == 'image/gif'
        
$image imagecreatefromgif($source);

    elseif (
$info['mime'] == 'image/png'
        
$image imagecreatefrompng($source);
// در پایان ایجاد یک تصویر با فرمت jpeg با کیفیت و نام تعیین شده در متغیر
    
imagejpeg($image$destination$quality);
// برگرداندن نام فایل ایجاد شده
    
return $destination;
}
// دریافت نام تصویر از کاربر
$source_img $_GET['image'];
// اگر چنین فایلی در مسیر وجود نداشت به مقدار خطاها یک عدد اضافه کن و پیغام خطا را نمایش بده
if (!file_exists($source_img) && !empty($_GET['image'])){
    echo 
"The file that you have mentioned is not available!";
    
$error++;
    }elseif(empty(
$_GET['image'])){
        echo 
"You have not declared an image.";
    
$error++;
}
// اگر کاربر درخواست کرده بود که نام تصادفی ساخته شود این کار صورت بگیرد
if ($_GET['random_name'] == 'yes'){
$destination_img md5($source_img) . '.jpg';
// در صورتی که کاربر درخواست کرده بود که نام تصادفی به فایل تعلق نگیرد نام اصلی فایل حفظ شود
}elseif($_GET['random_name'] == 'no'){
$destination_img $source_img '.jpg';
}
// انجام پروسه فشرده سازی تصویر
if ($error == 0){
$d compress($source_img$destination_img$_GET['quality']);
if(
$_GET['random_name'] == 'no'){
echo 
"Done!" '</br>';
}elseif(
$_GET['random_name'] == 'yes'){
    echo 
"Done!" '</br>';
    echo 
"The file name is: " $destination_img '</br>';
}
}
// اگر کاربر قصد داشت در حالت برقرار بودن ایجاد نام تصادفی تصویر اولیه حذف شود این کار انجام شود
if ($_GET['delete'] == && $error == 0){
unlink($source_img);
echo  
"Also the primitive file named ' " $source_img " ' was deleted as you wished!";
}
?>
طریقه استفاده از کد:
برای استفاده از کد باید ریکوئستی مشابه ریکوئست زیر ارسال کنین:
کد:
http://yourhost.com/file.php?image=x.jpg&quality=y&random_name=yes/no&delete=0/1
پارامتر image در واقع تصویری که قصد دارین فشرده سازی کنین رو مشخص میکنه که حتماً باید در دایرکتوری مورد نظرتون در هاست وجود داشته باشه. البته یادتون نره که در کنار نام فایل تصویری فرمتش رو هم درج کنین. پارامتر quality هم کیفیت تصویر خروجی رو مشخص میکنه که میتونین از یک تا صد بهش مقدار بدین. مسلم هست که هر چی کیفیت تصویر خروجی کمتر باشه حجم تصویر خروجی هم کمتر میشه و از اونطرف کیفیت هم کاهش پیدا میکنه. پارامتر random_name هم دو مقدار میتونین براش تعریف کنین. اگر مقدار yes براش تعریف بشه نام فایل خروجی مقدار md5 نام فایل اولیه خواهد بود و اگر مقدار این پارامتر no باشه نام فایل خروجی دقیقاً مشابه فایل اولیه خواهد بود. در نهایت پارامتر delete هم میتونه دو مقدار صفر یا یک داشته باشه. اگر مقدار صفر رو برای این پارامتر تنظیم کنین تصویر اولیه حذف نخواهد شد ولی اگر مقدار یک رو برای این پارامتر تعیین کنین تصویر اولیه حذف خواهد شد و فقط تصویر خروجی موجود خواهد بود.
دقت کنید که اگر پارامتر random_name رو برابر no قرار بدین در واقع فایل اولیه چه بخواین و چه نخواین حذف میشه چـرا که فایل خروجی با فایل اولیه replace یا جایگزین میشه.
خـروجی و توضیحات کـد:
به طور کلی اگر حالت نام تصادفی (random_name) فعال باشه و پارامتر delete هم مقدارش یک باشه چنین پیامی نمایش داده میشه.
کد:
Done!
The file name is: x (رشته MD5 نام فایل اولیه)
Also the primitive file named ' z.jpg ' was deleted as you wished!
اگر تصویر ذکر شده توسط کاربر هم موجود نباشه ارور زیر چاپ میشه:
کد:
The file that you have mentioned is not available!
چنانچه به کد دقت کرده باشین با دو خط دستور ارورهایی که مفسر PHP نمایش میده رو قطع کردیم. این مسئله میتونه خیلی کاربردی باشه و توصیه میکنم حتماً این مورد رو توی کدهای PHP خودتون اعمال کنین. درسته نمایش ارورها توسط مفسر PHP میتونه به توسعه دهنده در حین ساخت و تکامل پروژه کمک شایانی بکنه ولی اگر توی پروژه نهایی آپلود شده همچنان فعال باشه میتونه سرنخ های خوبی به دست هکرها بده. پس با این رویکرد باید حساب تک تک اتفاقاتی که ممکنه کاربر رقم بزنه رو بکنین!
امیدوارم از این مطلب لذت برده باشین و براتون مفید واقع شده باشه. خوشحال میشم نظراتتون رو بهم گوشزد کنین. 
به زودی آموزش فشرده کردن فایل های ویدیوئی در PHP (از لحاظ رزولیشن و بیت ریت) رو هم قرار میدم.
با آرزوی بهترین ها...
 
غایب
  پاسخ


 سپاس شده توسط: M.gh ، shazde ، oak ، amin hosseini
#2
(1399/1/9، 07:26 عصر)Master Badfar نوشته است: به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
حتماً براتون پیش اومده که فایل تصویری رو در هاست یا سرورتون بخواین آپلود کنین ولی نگران این باشین که فضایی که شرکت هاستینگ بهتون ارائه داده پر بشه. درسته که عموماً تصاویر حجم شاخصی ندارن ولی برای هاست یا سرورهایی که تنها چند مگ ظرفیت ذخیره سازی دارن این موضوع بسیار حیاتیه. به همین منظور امروز قصد داریم کد فشرده سازی تصاویر رو در

عالیییی
شما واقعا استاد هستیدد
آیا اگر بعدا خواستیم این عکس رو دانلود کنیم ، حجمش تغیییر کرده ؟؟؟
این کد چقدر می تواند از حجم تصاویر کم کند ؟؟؟؟
[تصویر:  default-yellow.svg]
غایب
  پاسخ


 سپاس شده توسط: Master Badfar
#3
(1399/1/9، 07:57 عصر)oak نوشته است:
(1399/1/9، 07:26 عصر)Master Badfar نوشته است: به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
حتماً براتون پیش اومده که فایل تصویری رو در هاست یا سرورتون بخواین آپلود کنین ولی نگران این باشین که فضایی که شرکت هاستینگ بهتون ارائه داده پر بشه. درسته که عموماً تصاویر حجم شاخصی ندارن ولی برای هاست یا سرورهایی که تنها چند مگ ظرفیت ذخیره سازی دارن این موضوع بسیار حیاتیه. به همین منظور امروز قصد داریم کد فشرده سازی تصاویر رو در




عالیییی
شما واقعا استاد هستیدد
آیا اگر بعدا خواستیم این عکس رو دانلود کنیم ، حجمش تغیییر کرده ؟؟؟
این کد چقدر می تواند از حجم تصاویر کم کند ؟؟؟؟
اینکه چقدر حجم کاهش پیدا کنه بستگی به این داره که کیفیت تصویر خروجی رو چقدر تعیین کنی. ولی اگر کیفیت تصویر رو روی 75 هم بزاری اونطور که من تست کردم یک تصویر 60 کیلوبایتی تبدیل شد به 48 و خرده ای کیلوبایت. 
اگر قصد داری مثلاً حجم تصاویر پروفایل رو کاهش بدی چون معمولاً تصویر پروفایل در ابعاد کوچکی نمایش داده میشه میتونی کیفیتش رو خیلی بیاری پایین و مشکل حادی هم ایجاد نمیشه.
در مورد دانلود تصویر خروجی هم بله مشخصاً حجمش تغییر کرده دیگه!
غایب
  پاسخ


 سپاس شده توسط: oak ، shazde
#4
اونوقت همون عکس قبلیو حجمشو تغییر میده یا یه تصویر جدید می سازه ؟؟؟
[تصویر:  default-yellow.svg]
غایب
  پاسخ


 سپاس شده توسط:
#5
(1399/1/9، 08:10 عصر)oak نوشته است: اونوقت همون عکس قبلیو حجمشو تغییر میده یا یه تصویر جدید می سازه ؟؟؟
همونطور که توضیح دادم اگر حالت random_name فعال باشه (روی yes باشه) و پارامتر delete هم روی صفر تنظیم شده باشه تصویر خروجی نامش برابر هست با مقدار md5 نام تصویر اولیه و تصویر اولیه پاک نمیشه. اما اگر مقدار پارامتر delete یک باشه تصویر اولیه پاک میشه.
اگر هم کلاً حالت random_name غیرفعال باشه (روی no باشه) چه شما بخواین (یعنی مقدار پارامتر delete رو یک قرار بدین) و چه نخواین (یعنی مقدار پارامتر delete رو صفر قرار بدین) فایل اولیه جایگزین (replace) میشه با فایل خروجی که معنیش اینه فایل اولیه به نوعی حذف میشه. 
غایب
  پاسخ


 سپاس شده توسط: oak ، shazde
#6
عالی بود!
  پاسخ


 سپاس شده توسط: Master Badfar


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش پروژه محور ساخت بازی مار و پله mohsen_nasri 6 3,823 1403/10/24، 09:38 عصر
آخرین ارسال: Tggi
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 128 86,515 1403/10/23، 04:58 عصر
آخرین ارسال: Tggi
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 20,942 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,610 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 8,623 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100

پرش به انجمن: