ورود

View Full Version : نمایش عکس



mah.tab
شنبه 21 تیر 1393, 18:54 عصر
سلام
چطوری می‌شه عکس هر کاربر رو در کنار پستی که میگذارد فراخوانی کرد؟

ممنون

MMSHFE
یک شنبه 22 تیر 1393, 02:51 صبح
یک فیلد برای نگهداری اسم فایل عکس هر کاربر بگذارین و وقتی عکس رو آپلود کردین اسمش رو اونجا ذخیره کنید. موقع نمایش هم بعنوان مثال اینطوری کار کنید:

<img alt="<?php echo CHtml::encode($model->name); ?>" src="<?php echo Yii::app()->homeUrl . '/images/' . $model->filename; ?>" />

mah.tab
یک شنبه 22 تیر 1393, 13:29 عصر
خب وقتی‌ واسه هر فایل یک اسم رندم استفاده کردیم، چطوری وقتی‌ داریم کلّ پست‌ها رو نمایش میدیم واسه هر کاربر بتونیم اون فایل نیم رو تشخیص بدیم؟

MMSHFE
یک شنبه 22 تیر 1393, 13:32 عصر
خوب اون اسم رندم رو موقعی که فایل رو آپلود کردین، توی فیلد filename جدول User ذخیره کنید.

mah.tab
یک شنبه 22 تیر 1393, 14:27 عصر
ممنون خیلی‌ کمک می‌کنین.
در مورد اینکه وقتی‌ فایل آپلود شده سایزش بزرگ باش، چطوری می‌شه تغییرش داد؟
ممنونم

MMSHFE
یک شنبه 22 تیر 1393, 15:08 عصر
باید با GD کار کنید. برای مثال به کد زیر دقت کنید که سایز فایل رو تا زیر 1 مگابایت کم میکنه (با کاهش کیفیت) :

$src = ImageCreateFromJPEG($_FILES['photo']['tmp_name']);
$w = ImageSX($src);
$h = ImageSY($src);
$dst = ImageCreateTrueColor($w, $h);
ImageCopy($dst, $src, 0, 0, 0, 0, $w, $h);
$quality = 100;
do {
ImageJPEG($dst, 'uploads/' . $_FILES['photo']['name'], $quality--);
} while($quality > 0 && filesize('uploads/' . $_FILES['photo']['name']) >= 1048576);
ImageDestroy($dst);
ImageDestroy($src);

mah.tab
دوشنبه 23 تیر 1393, 02:04 صبح
استاد ممنون، من منظورم سایز از نظر طول و عرضی، البته یه سری اکستنشن هست که این کار رو میکنه ولی چون شما همیشه پیشنهاد می‌کنین که از اکستنشن کمتر استفاده کنیم پرسیدم

MMSHFE
دوشنبه 23 تیر 1393, 09:11 صبح
توصیه من به عدم استفاده از اکستنشن دو دلیل داره:
1- اکثراً افزونه ها غیر اصولی نوشته میشن و آنچنان نظارتی روی کارکرد مناسب اونها و حفظ سازگاری با نسخه های جدید فریمورک یا سایر برنامه های کاربردی مرتبط وجود نداره.
2- عادت به استفاده از افزونه ها قبل از تسلط کافی روی خود فریمورک، باعث میشه توی اشکال زدایی و ایجاد تغییرات در اونها و حتی درک نحوه عملکردشون به مشکل برخورد کنید.

بهرصورت، برای تغییر ابعاد عکس میتونید از ImageCopyResized استفاده کنید. این مثال رو ببینید:

function SaveImage($source, $destination, $width = 640, $height = 480, $maxSize = 1048576) {
$src = ImageCreateFromJPEG($source);
$w = ImageSX($src);
$h = ImageSY($src);
$dst = ImageCreateTrueColor($width, $height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $width, $height, $w, $h);
$quality = 100;
do {
ImageJPEG($dst, $destination, $quality--);
} while($quality > 0 && filesize($destination) >= $maxSize);
ImageDestroy($dst);
ImageDestroy($src);
}

// Usage:
SaveImage($_FILES['photo']['tmp_name'], 'uploads/' . $_FILES['photo']['name']);
الان این کد، تصویر رو هر اندازه که باشه، 640x480 میکنه و سایزش رو هم زیر 1 مگابایت نگه میداره.