PDA

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



mohammad-gh
یک شنبه 11 دی 1390, 19:18 عصر
چطور می توانم عکسی که کاربر آپلود کرده را به 2 صورت روی هاست ذخیره کنم :
1- در اندازه واقعی (که این سوال بنده نیست)
2- در اندازه کوچک (سایز کوچک یا کپی کوچکی از همان عکس بزرگ )

mohammad-gh
یک شنبه 11 دی 1390, 22:41 عصر
ممنون از پاسختون
اما مثل اینکه شما سئوال من رو متوجه نشدید
سوال من تغییر اندازه نمایش تصویر نیست
سوال من تغییر سایز واقعی عکس است ، به عنوان مثال کاربر عکسی را به اندازه 150 در 150 آپلود کرده و ما می خواهیم انرا به به اندازه 50 در 50 واقعی تغییز سایز بدهیم
بدیهی است که با این کار سایز یا اندازه عکس هم بر حسب بابت کمتر می شود!
پس سوال اصلی من تغییر اندازه واقعی عکس است نه تغییر اندازه نمایشی عکس

mohsen6500
یک شنبه 11 دی 1390, 23:25 عصر
اینم واسه شما
یه تابع برای تغییر عکس
(http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/)
اینم یه تایع دیگست که همزمان آپلود میکنه و سایزش رو عوض می کنه!
(http://www.9lessons.info/2009/03/upload-and-resize-image-with-php.html)موفق باشید

MMSHFE
دوشنبه 12 دی 1390, 09:55 صبح
با سلام، من فرض کردم شما توی فرمتون، اسم تگ input دریافت فایل رو photo گذاشتین ( </"input type="file" name="photo> ) :


if($_FILES['photo']['error'] == 0) {
$tmp_name = $_FILES['photo']['tmp_name'];
$name = $_FILES['photo']['name'];
$src = imagecreatefromjpeg($tmp_name);
$dst = imagecreatetruecolor(50, 50);
imagecopyresized($dst, $src, 0, 0, 0, 0, 50, 50, imagesx($src), imagesy($src));
imagejpeg($dst, '/gallery/thumb/'.$name, 100);
imagedestroy($dst);
imagedestroy($src);
move_uploaded_file($tmp_name, '/gallery/'.$name);
}
else {
echo 'There was an error in file upload process.';
}

نکته: اعداد 50 اول و 50 دوم توی کدهای فوق، به ترتیب پهنا و ارتفاع تصویر پیشنمایش رو مشخص میکنند.
موفق باشید.

هادی2020
سه شنبه 13 دی 1390, 01:24 صبح
سلام من دنبال یه تبدیل واسه فرمت bmp هستم ( انگار نسخه های مختلفی داره 32 بیتی 16 بیتی و ...)
البته ببخشید از این تابع توی یه کلاس استفاده کرده ام. موارد امنیتی رو هم بررسی نکرده ام.


function Thumbnails($tfile=NULL,$new_w=125,$new_h=150,$add_ out="thumb/")
{ //$tfile=address pic, $new_w & $new_h= new size $add_out=address for save
if($tfile==NULL)
$tfile=$this->address.$this->name;
$type=strtolower(mb_substr(mb_strrchr($tfile, "."), 1 ));
if($type=="jpg" || $type=="jpeg")
$src = @imagecreatefromjpeg($tfile)or die("ERR jpg");
elseif($type=="png")
$src = @imagecreatefrompng($tfile)or die("ERR png");
elseif($type=="gif")
$src = @imagecreatefromgif($tfile)or die("ERR gif");
else
{
echo("<br />Not Support");
return ;
}
$width=imagesx($src);
$height=imagesy($src);
// if(($width>$height) && ($width>$new_w) && ($height>$new_h))
// {
// $c=round($width/$height);
// if($c>1)
// $h=round($new_h/$c);
// else
// $h=$new_h;
// $w=$new_w;
// }
// elseif(($width<$height) && ($width>$new_w) && ($height>$new_h))
// {
// $c=round($height/$width);
// if($c>1)
// $w=round($new_w/$c);
// else
// $w=$new_w;
// $h=$new_h;
// }
// else
// {
$w=($width>$new_w)? $new_w:$width;
$h=($height>$new_h)? $new_h:$height;
// }
if($type!="gif" && $type!="bmp")
{
$dst = @imagecreatetruecolor($w, $h) or die("ERR dst");
$white=imagecolorallocate($dst, 255, 255, 255);
imagefill($dst, 0, 0, $white);
imagecopyresampled($dst,$src,0,0,0,0,$w,$h,imagesx ($src),imagesy($src));
}
else
{
$dst =@imagecreate($w,$h);
imagecolorallocate($dst, 255, 255, 255);
imagecopyresized($dst, $src, 0, 0, 0, 0, $w, $h, imagesx($src), imagesy($src));
}
if($type=="jpg" || $type=="jpeg")
imagejpeg($dst, $this->address.$add_out.$this->name, 100);
elseif($type=="png")
imagepng($dst, $this->address.$add_out.$this->name, 0);
elseif($type=="gif")
imagegif($dst, $this->address.$add_out.$this->name);
imagedestroy($src);
imagedestroy($dst);
return ;
}

MMSHFE
سه شنبه 13 دی 1390, 16:03 عصر
کدتون خوبه ها، فقط به نظرم به جای اینهمه if و elseif و... میشد از switch استفاده کنید. کد خواناتر میشد. حالا برای BMP مشکل دارین؟