שלח תשובה

זירת השאלות

531
צפיות
0
תשובות

הקטנה אוטומטית של תמונה

,‏ 12 במרץ, 2005

שלום לכולם!

כדי להקטין תמונה שהועלתה לשרת באופן אוטומטי אני משתמש בפונקציה שאצלי על המחשב עובדת מצויין (שרת אפאצ'י על ווינדוס), אבל על השרת (לינוקס על MySQL) זה עושה בעיות כשמדובר בתמונות גדולות.

התהליך הוא: העלאת התמונה לשרת, שמירה בתיקייה זמנית, ביצוע שינויי גודל של התמונה ושמירה בתיקיות אחרות, ולסיום מחיקת התמונה המקורית. עם תמונות קטנות אין בעיה אבל שמתי לב שכשמדובר בתמונות גדולות יש בעיה.

למשל תמונה jpg, 72dpi, רוחב 3500 פיקסלים, משקל כ 200k. התמונה הועלתה לשרת (לתיקייה הזמנית) בהצלחה, אבל שם זה נעצר. לא נשמרו תמונות בגודל החדש ולא נמחקה התמונה המקורית.

אולי מישהו יוכל לומר לי ממה נובעת הבעיה?


הפונקציה שמטפלת בהקטנה (היא מקבלת את מיקום התמונה המקורית, יעד התמונה החדשה, רוחב מקסימלי, גובה מקסימלית, ואיכות ה jpg):






<?
function resampimagejpg($forcedwidth,$forcedheight,$sourcefile,$destfile,$imgcomp){
$g_imgcomp=100-$imgcomp;
$g_srcfile=$sourcefile;
$g_dstfile=$destfile;
$g_fw=$forcedwidth;
$g_fh=$forcedheight;

if(file_exists($g_srcfile)){
   $g_is=getimagesize($g_srcfile);
   //$ImageType = $g_is[2];

   //if($ImageType == "2"){
   if($g_is[0] > $g_fw || $g_is[1] > $g_fh){
     if(($g_is[0]-$g_fw)>=($g_is[1]-$g_fh)){
       $g_iw=$g_fw;
       $g_ih=($g_fw/$g_is[0])*$g_is[1];
     }
     else{
       $g_ih=$g_fh;
       $g_iw=($g_ih/$g_is[1])*$g_is[0];
     }
     $img_src=imagecreatefromjpeg($g_srcfile);
     $img_dst=imagecreatetruecolor($g_iw,$g_ih);
     imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
     imagejpeg($img_dst, $g_dstfile, $g_imgcomp);
     imagedestroy($img_dst);
     return true;
   }
   else{
     $img_src=imagecreatefromjpeg($g_srcfile);
     $img_dst=imagecreatetruecolor($g_is[0],$g_is[1]);
     imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_is[0], $g_is[1], $g_is[0], $g_is[1]);
     imagejpeg($img_dst, $g_dstfile, $g_imgcomp);
     imagedestroy($img_dst);
     return true;
   }
   //}
   return false;
}
else
   return false;
}
?>


תגיות:

0 תשובות

    שלח תשובה