PDA

View Full Version : کد کاربردی برای ثبت و ویرایش تصویر در php



masoomenoroozi
پنج شنبه 08 اسفند 1392, 08:38 صبح
با سلام خدمت دوستان

من یه قطعه کد میخوام برای ثبت تصویر و کدی برای ویرایش تصویر ثبت شده در mysql با زبان php
کسی میتونه کمک کنه .

کدی که خلاصه باشه
سرچ کردم ولی کدا خیلی طولانی و نامفهومن

دوستان سریع تر

ممنون از همتون

مهرداد سیف زاده
پنج شنبه 08 اسفند 1392, 08:48 صبح
در ابتدا باید سناریوی کارتون رو خوب مشخص کنید
شما یه سری تصویر دارید که میخوایید ویرایش کنید حالا قبل از ذخیره یا بعد از ذخیره در دیتابیس
در کل شما نیاز به کار با gd library دارید که بتونه تصویر رو ویرایش کنه
حالا چه ویرایشی مهم هست. منظور از ویرایش
۱. قرار دادن caption یا اضافه کردن متن به تصویر
۲. corp و تغییر سایز
۳. اضافه کردن یک تصویر به تصویر دیگر
۴. با دادن مختصات قطعه ای از یک تصویر را بگیرد و برگرداند
و خلاصه هزاران کار مختلف که همه در یک قطعه کد نمیگنجد و باید یک مجموعه کلاس را به همدیگه ادغادم کنید.

به کلاسهای قسمت gd سر بزنید و ببینید کدوم یکی کارتون رو راه می اندازه
http://www.phpclasses.org/browse/class/11.html

masoomenoroozi
پنج شنبه 08 اسفند 1392, 08:57 صبح
توسط یک فرم اطلاعات در بانک ذخیره شده و تصویر مربوطه در فولدری که مشخص کردم بعد از ثبت وجود داره . برای نمایش اون هم مشکلی ندارم
فقط میخوام این تصویر که مربوط به کاربر هست اگه کاربر خواست بتونه اونو ویرایش کنه
یعنی یه تصویر جای تصویر قبلی بزاره و قبلیه پاک بشه


در ابتدا باید سناریوی کارتون رو خوب مشخص کنید
شما یه سری تصویر دارید که میخوایید ویرایش کنید حالا قبل از ذخیره یا بعد از ذخیره در دیتابیس
در کل شما نیاز به کار با gd library دارید که بتونه تصویر رو ویرایش کنه
حالا چه ویرایشی مهم هست. منظور از ویرایش
۱. قرار دادن caption یا اضافه کردن متن به تصویر
۲. corp و تغییر سایز
۳. اضافه کردن یک تصویر به تصویر دیگر
۴. با دادن مختصات قطعه ای از یک تصویر را بگیرد و برگرداند
و خلاصه هزاران کار مختلف که همه در یک قطعه کد نمیگنجد و باید یک مجموعه کلاس را به همدیگه ادغادم کنید.

به کلاسهای قسمت gd سر بزنید و ببینید کدوم یکی کارتون رو راه می اندازه
http://www.phpclasses.org/browse/class/11.html

مهرداد سیف زاده
پنج شنبه 08 اسفند 1392, 10:27 صبح
این که راحته
شما اصلا با ویرایش عکس کار ندارید بلکه با فایل کار دارید
شما اسم عکس کاربر رو در دیتابیس ذخیره کردید حالا در زمانی که کاربر درخواست ویرایش رو داد و عکس جدید رو آپلود کرد و آپلود موفقست آمیز بود حالا فایل قبلی رو ابتدا پاک کنه و بعد فایل جدید رو که آپلود شده در پوشه مربوطه قرار بده و اسم فایل رو همراه با مسیرش رو دیتابیس ذخیره کنید

برای حذف فایل در php از unlink (http://ir1.php.net/unlink) و برای آپلود هم از $_FILES (http://ir1.php.net/manual/en/reserved.variables.files.php) استفاده میشه

masoomenoroozi
پنج شنبه 08 اسفند 1392, 10:32 صبح
بله منظوره منم دقیقا همینه
کد رو نوشتم . آپدیت انجام میشه .فقط تصویر سیاه ثبت میشه . نمدونم چرا؟








این که راحته
شما اصلا با ویرایش عکس کار ندارید بلکه با فایل کار دارید
شما اسم عکس کاربر رو در دیتابیس ذخیره کردید حالا در زمانی که کاربر درخواست ویرایش رو داد و عکس جدید رو آپلود کرد و آپلود موفقست آمیز بود حالا فایل قبلی رو ابتدا پاک کنه و بعد فایل جدید رو که آپلود شده در پوشه مربوطه قرار بده و اسم فایل رو همراه با مسیرش رو دیتابیس ذخیره کنید

برای حذف فایل در php از unlink (http://ir1.php.net/unlink) و برای آپلود هم از $_FILES (http://ir1.php.net/manual/en/reserved.variables.files.php) استفاده میشه

MMSHFE
پنج شنبه 08 اسفند 1392, 10:43 صبح
مهمترین نکته ای که باید رعایت کنید اینه که ابداً خود تصویر رو توی دیتابیس ذخیره نکنید بلکه تصویر بصورت فایل معمولی توی سیستم در پوشه مشخص شده آپلود بشه و شما فقط اسم فایل رو توی دیتابیس در فیلد مربوط به تصویر بگذارین. اینطوری چند مزیت داره:
1- امکان استفاده از فشرده سازی - فرمتهایی مثل JPEG و PNG بخاطر دارابودن Compressor میتونن حجم یک تصویر رو بدون افت محسوس کیفیت، به شدت کاهش بدن. برای مثال یک تصویر 800x600 با کیفیت TrueColor (تصویر 32 بیتی) اگه مستقیماً توی دیتابیس ذخیره بشه، 800x600x32 بیت یعنی 1,875 مگابایت فضا اشغال میکنه که با استفاده از فرمتی مثل JPEG این حجم میتونه به حدود 200 کیلوبایت برسه.
2- ویرایش ساده تر - تصویر جدید رو با همون نام قبلی دوباره آپلود میکنید.
3- پشتیبان گیری راحت تر - تصور کنید بخواین از یک دیتابیس که عکس 1000 کاربر داخلش هست پشتیبانی بگیرین: فقط Backup دیتابیس شما نزدیک به 2 گیگابایت میشه.
4- امکان ویرایش و جایگزین کردن دستی تصویر - کافیه تصویر دلخواه رو از پوشه تصاویر پیدا کنید و بعد از ویرایش، تصویر جدید رو جایگزین قبلی کنید و دیتابیس هم نیاز نیست اصلاح بشه.
5- افزایش سرعت واکشی و نمایش اطلاعات - از اونجا که هر رکورد در این روش دیگه حجم حدود 2 مگابایت نداره، تبادل اطلاعات بین MySQL و PHP سریعتره و ازطرفی بارگذاری تصویر در مرورگر کاربر هم به دلیل فشرده بودن تصاویر، سریعتر انجام میشه.
6- پیاده سازی ساده تر - خیلی ساده میتونید با همون move_uploaded_file یا اگه به امنیت اهمیت میدین، با توابع GD تصویر آپلودشده رو بخونید و در مسیر موردنظر ذخیره کنید و درگیر مفاهیم Blob و دیتاهای باینری در MySQL نخواهید شد.

MMSHFE
پنج شنبه 08 اسفند 1392, 10:43 صبح
کدتون رو بگذارین ببینیم مشکل از کجاست. ندیده نمیشه قضاوت کرد یا مشکل رو حدس زد.

masoomenoroozi
پنج شنبه 08 اسفند 1392, 11:07 صبح
عذر خواهی میکنم ممکنه کد درج و ویرایش رو برام بفرستین
با تشکر




مهمترین نکته ای که باید رعایت کنید اینه که ابداً خود تصویر رو توی دیتابیس ذخیره نکنید بلکه تصویر بصورت فایل معمولی توی سیستم در پوشه مشخص شده آپلود بشه و شما فقط اسم فایل رو توی دیتابیس در فیلد مربوط به تصویر بگذارین. اینطوری چند مزیت داره:
1- امکان استفاده از فشرده سازی - فرمتهایی مثل JPEG و PNG بخاطر دارابودن Compressor میتونن حجم یک تصویر رو بدون افت محسوس کیفیت، به شدت کاهش بدن. برای مثال یک تصویر 800x600 با کیفیت TrueColor (تصویر 32 بیتی) اگه مستقیماً توی دیتابیس ذخیره بشه، 800x600x32 بیت یعنی 1,875 مگابایت فضا اشغال میکنه که با استفاده از فرمتی مثل JPEG این حجم میتونه به حدود 200 کیلوبایت برسه.
2- ویرایش ساده تر - تصویر جدید رو با همون نام قبلی دوباره آپلود میکنید.
3- پشتیبان گیری راحت تر - تصور کنید بخواین از یک دیتابیس که عکس 1000 کاربر داخلش هست پشتیبانی بگیرین: فقط Backup دیتابیس شما نزدیک به 2 گیگابایت میشه.
4- امکان ویرایش و جایگزین کردن دستی تصویر - کافیه تصویر دلخواه رو از پوشه تصاویر پیدا کنید و بعد از ویرایش، تصویر جدید رو جایگزین قبلی کنید و دیتابیس هم نیاز نیست اصلاح بشه.
5- افزایش سرعت واکشی و نمایش اطلاعات - از اونجا که هر رکورد در این روش دیگه حجم حدود 2 مگابایت نداره، تبادل اطلاعات بین MySQL و PHP سریعتره و ازطرفی بارگذاری تصویر در مرورگر کاربر هم به دلیل فشرده بودن تصاویر، سریعتر انجام میشه.
6- پیاده سازی ساده تر - خیلی ساده میتونید با همون move_uploaded_file یا اگه به امنیت اهمیت میدین، با توابع GD تصویر آپلودشده رو بخونید و در مسیر موردنظر ذخیره کنید و درگیر مفاهیم Blob و دیتاهای باینری در MySQL نخواهید شد.

masoomenoroozi
پنج شنبه 08 اسفند 1392, 11:09 صبح
function edit_insert_info($id_ow,$title,$keyy,$price,$nam,$ tel,$mob,$your_email,$site,$ostan,$city,$address,$ valid,$show,$date1,$desc,$category,$p1)
{







$conn = db_connect();
if (!$conn)
return ' خطا در اتصال به بانک ';


$r=mysql_query("select * from product where id='$id_ow'") or die(mysql_fetch_array());















copy($_FILES['pic']['tmp_name'],'../img/pro/'.$p1);
$ext = end(explode('.',$p1));
$name_p=$id_ow.'.'.$ext;
$image = new SimpleImage();


$image->load("../img/pro/".$p1);
$image->save("../img/pro/".$name_p);
$image->load("../img/pro/".$name_p);
$image->resize(110,110);
$image->save("../img/pro/".$name_p);
$path='../img/pro//';
chdir($path);
unlink("$p1");








$sql = "update product set



title='$title',


price='$price',
name='$nam',
tell='$tel',
mob='$mob',
email='$your_email',
site='$site',
ostan='$ostan',
city='$city',
address='$address',
pic='$name_p',
valid='$valid',
date_in='$date1',


category='$category',
dont_accept=''
where id='$id_ow'";






$result = mysql_query($sql) or die(mysql_error());
if (!$result)
return ' Could not register you in database - please try again later.';
return true;

}

مهرداد سیف زاده
پنج شنبه 08 اسفند 1392, 12:04 عصر
کلاس SimpleImage رو هم بزارید خوبه
همچنین در لحظه پاس دادن مقدار عکس به این کلاس باید ببینید که درست بارگزاری شده و داره اطلاعات درست رو میفرسته امکان داره شما مسیر عکس رو. درست نداده باشید یا فایل توی پوشه مربوطه نباشه

masoomenoroozi
پنج شنبه 08 اسفند 1392, 12:17 عصر
از تابع simple image استفاده کردم
ببخشید عذر خواهی میکنم
کدی برای ویرایش دارین که کمک کنه .


کلاس SimpleImage رو هم بزارید خوبه
همچنین در لحظه پاس دادن مقدار عکس به این کلاس باید ببینید که درست بارگزاری شده و داره اطلاعات درست رو میفرسته امکان داره شما مسیر عکس رو. درست نداده باشید یا فایل توی پوشه مربوطه نباشه