در این آموزش PHP قصد داریم به شما نحوه کم کردن حجم تصویر با PHP یا همان فشرده سازی تصاویر هنگام آپلود روی سایت را نشان بدیم.
همانطور که می دانید تصاویر با حجم زیاد باعث بالارفتن زمان بارگزاری یک صفحه وب می شوند.
اگر می خواهید یک عکس بزرگ را بدون گذاشتن تاثیر منفی روی سرعت سایت را لود کنید, نیاز است که تصویر برای کاهش حجم فشرده/بهینه شود.
معمولا کاربران هنگام آپلود یک تصویر داخل وبسایت آن را برای وب بهینه نمی کنند. بنابراین در این مورد ما باید تصویر را قبل آپلود فشرده کنیم تا بهینه شود.
فشرده/بهنیه/ کم کردن حجم تصویر با PHP به راحتی قابل پیاده سازی است.
در قابلیت فشرده سازی تصاویر, حجم فایل قبل آپلود کاهش می یابد. عکس فشرده شده با ما در استفاده بهینه تر از فضای هاست/سرور و افزایش لود صفحه وب کمک می کند.
در این آموزش, به راحتی نحوه پیاده کردن اسکریپت کم کردن حجم تصویر با PHP را قبل آپلود را نشان می دهیم.
در آموزش های قبلی نحوه آپلود فایل با PHP و AJAX را دیدیم :
فرم آپلود فایل
یک فرم HTML به همراه یک فیلد فایل و دکمه سابمیت بسازید. مطمین باشید که تگ <form>
شامل خصوصیات زیر باشد.
Method=”post”
Enctype=”multipart/form-data”
1 2 3 4 5 |
<form action="upload.php" method="post" enctype="multipart/form-data"> <label>Select Image File:</label> <input type="file" name="image"> <input type="submit" name="submit" value="Upload"> </form> |
همینکه فرم سابمیت شد, داده های تصویر به سمت فایل upload.php
به منظور انجام عملیات ارسال می شود
آپلود و کم کردن حجم تصویر با PHP
فایل upload.php
عملیات فشرده سازی و آپلود عکس را هندل می کند.
Compressimage()
یک تابع سفارشی است که کمک می کند تا تصویر را فشرده و ذخیره کنیم.
اگر فایل سابمیت شد, داده های فایل با متد $_FILES
در PHP دریافت می شود و با تابع compressimage()
حجم تصویر فشرده و آپلود می شود.
همچنین وضعیت آپلود عکس با متن های از پیش نوشته شده چاپ می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php /* * Custom function to compress image size and * upload to the server using PHP */ function compressImage($source, $destination, $quality) { // Get image info $imgInfo = getimagesize($source); $mime = $imgInfo['mime']; // Create a new image from file switch($mime){ case 'image/jpeg': $image = imagecreatefromjpeg($source); break; case 'image/png': $image = imagecreatefrompng($source); break; case 'image/gif': $image = imagecreatefromgif($source); break; default: $image = imagecreatefromjpeg($source); } // Save image imagejpeg($image, $destination, $quality); // Return compressed image return $destination; } // File upload path $uploadPath = "uploads/"; // If file upload form is submitted $status = $statusMsg = ''; if(isset($_POST["submit"])){ $status = 'error'; if(!empty($_FILES["image"]["name"])) { // File info $fileName = basename($_FILES["image"]["name"]); $imageUploadPath = $uploadPath . $fileName; $fileType = pathinfo($imageUploadPath, PATHINFO_EXTENSION); // Allow certain file formats $allowTypes = array('jpg','png','jpeg','gif'); if(in_array($fileType, $allowTypes)){ // Image temp source $imageTemp = $_FILES["image"]["tmp_name"]; // Compress size and upload image $compressedImage = compressImage($imageTemp, $imageUploadPath, 75); if($compressedImage){ $status = 'success'; $statusMsg = "Image compressed successfully."; }else{ $statusMsg = "Image compress failed!"; } }else{ $statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.'; } }else{ $statusMsg = 'Please select an image file to upload.'; } } // Display status message echo $statusMsg; ?> |
جمع بندی کم کردن حجم تصویر با PHP
بطور معمول, تابع move_uploaded_file()
برای آپلود فایل با php استفاده می شود. اما, اگر می خواهید قبل آپلود (منظور انتقال از tmp به بخش اصلی هاست) تصویر را فشرده کنید, تابع سفارشی ما (compressImage()
) بسیار مفید خواهد بود.
این کد مثال به شما کمک می کند که بدون استفاده از هیچ گونه کتابخانه فشرده سازی خارجی تصویر خود را فشرده کنید.
با این اسکریپت می تواند انواع مختلف فایل تصویر مانند JPG, JPEG, PNG, GIF را فشرده کنید.
البته کتابخانه های رایگان زیادی در سطح وب و Github موجود است که امکانات زیادی را برای کم کردن حجم تصویر با PHP را در اختیار شما قرار می دهند.
و ما در این آموزش ساده ترین راه را برای فشرده سازی عکس با PHP را ارایه دادیم که بنابر نیاز در بخش های مختلف پروژه خود می توانید استفاده کنید.
امیدوارم از آموزش کم کردن حجم تصویر با PHP نهایت استفاده را برده باشید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
سلام مهندس شفیعی
من در سمت فرانت حجم عکس رو کاهش میدم و عکس رو هم نمایش میدم ولی موقع آپلود عکس اصلی آپلود میشه
چطوری عکسی رو که کاهش حجم پیدا کرده به جای عکس اصلی در تگ input قرار بدم با تشکر از سایت خوبتون
سلام. در سمت فرانت اگه با جاواسکریپت هست که اون رو در تگ قرار بدید با جی کویری میتونید تغییر بدید
سلام من از این روش استفاده کردم اما کیفیت عکس هم کاهش پیدامیکنه ، راهی هست که کیفیت عکس کاهش چشمگیری نداشته باشه و حجمش هم کم شه؟
سلام.
باید از ImageMagick داخل php استفاده کنی
سلام مجدد مشکلم حل شد باید gd رو فعال میکردم
سلام مهندس شفیعی من کد ها رو کپی و استفاده کردم ولی خطای undefined imagecreatefrompng رو میده
چیکار کنم ؟ مگه این توابع مال خود php نیست که میگه تعریف نشده
سلام مهندس شفیعی عزیز کتابخونه ای هست که بخواهیم عکس موردنظر رو که از کاربران میگیریم روی ۲۰۰ کیلو بایت تنظیم و کاهش بده با تشکر
سلام کلی گشتم سایتای مختلف رو دمتون گرم عالی بود.
سلام کلی گشتم سایتای مختلف رو دمتون گرم عالی بود
سلام این تابع میاد حجم عکس رو کم می کنه بعد آپلود>؟
سلام. بله
سلام الان دقیقا کجا باید کد های آپلود رو گذاشت که این عکس فشرده شده آپلود بشه !!!
سلام. این کدها هم آپلودر هست و هم کم کننده حجم.
تابع compressImage همان حجم را کاهش میده
آره اوکی شد ممنون بابت مطلب خوبتون
فقط میشه کناره همین کاهش حجم عکس اندازش رو هم کم کرد که حجم بیشتر کاهش پیدا کنه؟
بله میتونید از این آموزش استفاده کنید:
تغییر اندازه تصویر در php