PDA

View Full Version : سوال: محدود کردن سایز تصویر برای آپلود در فرم



masoomenoroozi
سه شنبه 03 بهمن 1391, 09:25 صبح
سلام دوستان
فرمی برای ثبت نام کاربر دارم که کاربر باید تصویر خودش رو آپلود کنه . ولی می خوام سایزش رو محدود کنم و میخوام هم که در همون صفحه یعنی توی خود فرم به کاربر پیغام بده .باید چیکار کنم.
برنامم به زبان php است
با تشکر

ravand
سه شنبه 03 بهمن 1391, 10:00 صبح
برای اینکه توی همون فرم به کاربر پیغم بده از ایجکس استفاده کن . اعتبارسنجی حجم هم اینه:

if($_FILES["aks"]["size"] > 200000)
{
echo '<script type=text/javascript>alert("حجم عكس بيش از 200 كيلو بايت است.")</script>';
exit;
}

siavashsay
سه شنبه 03 بهمن 1391, 10:00 صبح
دوست عزیز !
منظورتون از سایز دقیقا کدوم هست ؟! سایز ( اندازه تصویر مثلا 100px * 100px ) و یا حجم تصویر ( مثلا 50KB )
در هر صورت اگر میخواید که حجم تصویر رو محدود کنید از این کد استفاده کنید :

$img_size=$_FILES['myimg']['size'];
if(($img_size<200000) && ($img_size>50000)){
// do anything
}else{
// Error
}
اما اگر میخواید که اندازه تصویر رو محدود کنید مثلا به 100px * 100px از کد زیر استفاده کنید :



list($width, $height) = getimagesize($_FILES['myimg']['tmp_name']);
if($width != 100 or $height !=100){
echo "Width - Height is False";
exit;
}

همچنین اگر میخواید در کل از تابعی استفاده کنید که بعد از آپلود شدن تصویر توسط کاربر عکس به صورت خودکار resize بشه از تابع زیر میتونید استفاده کنید :

// Resize pic
function resize_image($file,$new_file){
$new_width=100;
$new_height=90;
if(!extension_loaded('gd')&&!extension_loaded('gd2')) {
die("GD is not installed!");
}
list($width,$height,$type)=getimagesize($file);
switch($type)
{
case 1:$img=imagecreatefromgif($file);break;
case 2:$img=imagecreatefromjpeg($file);break;
case 3:$img=imagecreatefrompng($file);break;
default:die('Unsknown file!');
}

$new_img=imagecreatetruecolor($new_width,$new_heig ht);
if(($type==1)||($type==3)){
imagealphablending($new_img,false);
imagesavealpha($new_img,true);
$tmp=imagecolorallocatealpha($new_img,255,255,255, 127);
imagefilledrectangle($new_img,0,0,$new_width,$new_ height,$tmp);
}
imagecopyresampled($new_img,$img,0,0,0,0,$new_widt h,$new_height,$width,$height);
switch($type)
{
case 1:imagegif($new_img,$new_file);break;
case 2:imagejpeg($new_img,$new_file);break;
case 3:imagepng($new_img,$new_file);break;
default:die('Failed resize image!');
}
}
طریقه استفاده از تابع :

resize_image($old_img,$new_img);
در این تابع عکس بعد از آپلود به سایز 90*100 پیکسل تغییر پیدا میکنه !
میتونید از توی تابع اندازه اون 100 و 90 رو خودتون تنظیم کنید !
موفق باشید ! :)

masoomenoroozi
سه شنبه 03 بهمن 1391, 10:19 صبح
ممنونم از پاسختون .
این کدها برای صفحه بعدی هست که میادو حجم تصویرو چک میکنه ولی من می خوام داخل خود فرم این کار انجام بشه و تا حجم مورد نظر تایید نبود اصلا ثبت نکنه و پیغامی رو کنار فیلد عکس چاپ کنه

siavashsay
سه شنبه 03 بهمن 1391, 11:32 صبح
گمونم منظورتون استفاده از jQuery - Ajax باشه !
در اینصورت شما باید کلا یک فرم جدا بنویسید واسه این کار !
در اینجا باید 2 تا صفحه داشته باشید !
صفحه اول : صفحه ای که فرم شما توی اون هست ( قسمت فیلد برای آپلود تصویر )
صفحه دوم : صفحه آپلود تصویر هست که توسط Ajax فراخوانی میشه !
توضیحات :
1- یک قایل به نام jqeury.form.js ضمیمه کردم حتما اون رو در پوشه این فایل ها بذارید که ضمیمه شه !
2- یک پوشه به نام images در همین پوشه که فایل های شما قرار داره درست کنید
--- پوشه شما باید حاوی این فایل ها باشه : form.php - upload.php - jquery.form.js - images
images پوشه هست !
کد صفحه form.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript" src="jquery.form.js"></script>
<script>
$(document).ready(function(e) {
$('#photoimg').live('change', function() {
$("#preview").html('');
$("#preview").html('<img src="loader.gif" alt="Uploading...."/>');
$("#imageform").ajaxForm({
target: '#preview'
}).submit();

});
});
</script>
</head>

<body>
<form id="imageform" name="imageform" method="post" enctype="multipart/form-data" action='upload.php'>
<p>
<input name="photoimg" type="file" id="photoimg" />
</p>
<p>&nbsp;</p>
</form>
<div id="preview"> </div>
</body>
</html>

کد صفحه upload.php

<?php
$path = "images/";
// نام پسوند های مورد نظر رو در اینجا وارد کنید
$valid_formats = array("gif","png","jpg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$name = $_FILES['photoimg']['name'];
$size = $_FILES['photoimg']['size'];
list($width, $height) = getimagesize($_FILES['photoimg']['tmp_name']);

// چک کردن برای سایز تصویر - اندازه هارو به مقدار دلخواه تغییر بدبد
if($width != 125 or $height !=125){
echo "Width - Height is False";
exit;
}
if(strlen($name))
{
list($txt, $ext) = explode(".", $name);
if(in_array($ext,$valid_formats))
{
// چک کردن برای اندازه حجم فایل
if($size<(1024*1024) && $size>50000)
{
$actual_image_name = time().substr(str_replace(" ", "_", $txt), 5).".".$ext;
$tmp = $_FILES['photoimg']['tmp_name'];
if(move_uploaded_file($tmp, $path.$actual_image_name))
{
// چنانجه مایل هستید در صورت موفقیت آمیز بودن چیزی رو در دیتابیس ذخیره کنید در این خط استفاده کنید
//mysql_query("UPDATE users SET profile_image='$actual_image_name' WHERE uid='$uid'");
echo "<img src='images/".$actual_image_name."' class='preview'>";
}
else
echo "failed";
}
else
echo "Image file size 50 KB - 1 MB";
}
else
echo "Invalid file format..";
}

else
echo "Please select image..!";

exit;
}

?>
توی این فایل توضیحات رو براتون نوشتم !
میتونید تغییرات رو اعمال کنید !
موفق باشید