ABA


"שאלה ב - PHP - עיבוד תמונה."
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #5710 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 5710
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   08:32   02.03.04   
אל הפורום  
  שאלה ב - PHP - עיבוד תמונה.  
 
שלום לכולם.

התקנתי PHP גרסת ZIP (זו שמכילה מלא EXTENSIONS), והתקנתי GD2, לעיבוד תמונה.

אני מנסה לכתוב דף קטן, שידע להגיד לי אם נקודה שחורה בתמונה (היחידה התמונה), היא באותו קו של נקודה אדומה התמונה על ציר ה - Y.

זה מה שניסיתי :


<?php

// create an image
$im = ImageCreateFromJPEG("1.jpg");

// white background and blue text
$bg = imagecolorallocate($im, 255, 255, 0);

$textcolor = imagecolorallocate($im, 0, 0, 255);

// write the string at the top left
//imagestring($im, 5, 0, 0, "Hello world!11", $textcolor);

// output the image
header("Content-type: image/jpg");

$width = imagesx($im);
$height = imagesy($im);

$blackX = 0;
$blackY = 0;
$redX = 0;
$redY = 0;

for ($cy=0;$cy<$height;$cy++)
{
for ($cx=0;$cx<$width;$cx++)
{
$rgb = ImageColorAt($im, $cx, $cy);
if ($rgb == imagecolorexact($im, 0, 0, 0))
{
$blackX = $cx;
$blackY = $cy;
}
}
}

for ($cy=0;$cy<$height;$cy++)
{
for ($cx=0;$cx<$width;$cx++)
{
$rgb = imagecolorat($im, $cx, $cy);
if ($rgb == imagecolorexact($im, 255, 0, 0))
{
$redX = $cx;
$redY = $cy;
}
}
}

if ($blackY == $redY)
imagestring($im, 2, 0, 0, "Points Match!", $textcolor);
else
imagestring($im, 2, 0, 0, "Points Do Not Match!", $textcolor);

imagejpeg($im);
?>

הנה התמונה שאיתה אני עובד :
http://n.rotter.net/User_files/nor/40442a052ba117e0.jpg

משום מה, הערכים blackY ו - blackX הם תמיד 0.

יש למישהו מושג למה ?

תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  סקריפט נחמד.. אתה כתבת לבד? Fixxxer 02.03.04 14:06 1
     אמ... את התמונה שמרתי בעזרת PHOTOSHOP. Ice Cold  02.03.04 14:36 2
         כן, זה פועל. Fixxxer 02.03.04 14:45 3
             אתה יודע מה צריך להוסיף Ice Cold  02.03.04 15:00 4
                 GD2.. Fixxxer 02.03.04 15:02 5
                     הנה הקובץ ה''מתוקן'' Ice Cold  02.03.04 23:42 6

       
Fixxxer

   14:06   02.03.04   
אל הפורום  
  1. סקריפט נחמד.. אתה כתבת לבד?  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 02.03.04 בשעה 14:07 בברכה, Fixxxer
 
אם כן זה ממש יפה.
בכל מקרה, אני חושב שאני יודע מה הבעיה במקרה שלך.
קודם כל התמונה שאתה העלת היא מסוג GIF ובסקריפט שלך תמיד מתייחסים לJPEG.
פשוט תחליף את זה:
$im = ImageCreateFromJPEG("1.jpg");

ל:
$im = ImageCreateFromGIF("1.gif");

ואת זה:
header("Content-type: image/jpg");

לזה:
header("Content-type: image/gif");

למרות שגם אם זה היה jpg זה היה צריך ליהיות ככה:
header("Content-type: image/jpeg");

חוץ מזה הכל נראה לי תקין.
אפילו הרצתי את זה על המחשב וזה פועל.

חוץ מזה, לכל בעיה בPHP:
http://n.rotter.net/nor/webgraph/5340.shtml


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   14:36   02.03.04   
אל הפורום  
  2. אמ... את התמונה שמרתי בעזרת PHOTOSHOP.  
בתגובה להודעה מספר 1
 
ערכתי לאחרונה בתאריך 02.03.04 בשעה 14:38 בברכה, Ice Cold
 
ואני די בטוח שזה JPEG.

תודה, אני כתבתי את זה. אני בונה מערכת בשילוב עם VB שמתממשקת למצלמה, תופסת תמונה, ומנסה לייצב אותה ע"י סמנים מיוחדים על האובייקט שמצלמים.
בגדול זה מיודע לצילום מסכים של טלפונים ניידים וכל המצבים שלהם, ואז ליצור מין הדמייה של טלפון פעיל לכל דבר אני בונה אלגוריתם נורא פשוט שבמקרה שתפסת תמונה אבל היא לא יציבה, הקוד יעשה ROTATE אז שהכל יהיה יציב, ואז יחתוך רק התמונה שצרין (בעזרת הסמנים).

ואני בטוח שזה JPEG.
חוץ מזה, ה - MIME ששלחתי גם טוב, כי אני רואה את התמונה על המסך.

וזה רץ ? קיבלת הטדעה מתאימה ? ניסית לשנות את המיקום של הנקודות ?

בכל מקרה, אני אנסה את זה בבית... ניסיתי להשתמש ב - ImageCreateFromGIF אבל לא הצלחתי. יש איזה פרמטר מיוחד ב - php.ini שצריך להוסיף כדי לתמול בזה ?

תודה רבה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Fixxxer

   14:45   02.03.04   
אל הפורום  
  3. כן, זה פועל.  
בתגובה להודעה מספר 2
 
   ואני לא יודע כמה אתה בטוח שזה JPG אבל מה שיש פה בהודעה שלך זה GIF ואני בטוח בזה.
ועם הגיף הזה זה פעל לי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   15:00   02.03.04   
אל הפורום  
  4. אתה יודע מה צריך להוסיף  
בתגובה להודעה מספר 3
 
כדי להשתמש ב - ImageCreateFromGIF ?

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Fixxxer

   15:02   02.03.04   
אל הפורום  
  5. GD2..  
בתגובה להודעה מספר 4
 
   זה חלק מאותן אוסף פקודות.
אתה לא צריך שום דבר נוסף להשתמש בזה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   23:42   02.03.04   
אל הפורום  
  6. הנה הקובץ ה''מתוקן''  
בתגובה להודעה מספר 5
 
אבל משום מה הוא נכנס ללולאה רק פעם אחת, מכיוון שבפעם השנייה, הערכים של X ו-Y של שני הצבעים הם 0. :(

יש לך מושג למה אולי ?


<?php

// create an image
$im = ImageCreateFromGIF("1.gif");

// white background and blue text
$bg = imagecolorallocate($im, 255, 255, 0);
$bg2 = imagecolorallocate($im, 255, 255, 255);

$textcolor = imagecolorallocate($im, 255, 0, 0);

// write the string at the top left
//imagestring($im, 5, 0, 0, "Hello world!11", $textcolor);

// output the image
header("Content-type: image/gif");

$im2 = $im;

function rotatepicture()
{
global $im;
global $bg;
global $im2;

for ($i=0;$i<100;$i++)
{
//print "Loop Started.\n";
$width = imagesx($im2);
$height = imagesy($im2);
//print "Image Width - " . $width . "\n";
//print "Image Height - " . $height . "\n";

$blackX = 0;
$blackY = 0;
$redX = 0;
$redY = 0;

for ($cy=0;$cy<$height;$cy++)
{
for ($cx=0;$cx<$width;$cx++)
{
$rgb = ImageColorAt($im2, $cx, $cy);
if ($rgb != 2 and $rgb != 16776960)
//Print "Pixel Color - " . $rgb . " On " . $cx . "," . $cy . "\n";
if ($rgb == 0)
{
$blackX = $cx;
$blackY = $cy;
}
$rgb = ImageColorAt($im2, $cx, $cy);
if ($rgb == 3)
{
$redX = $cx;
$redY = $cy;
}
}
}
//print "BlackX - " . $blackX . "\n";
//print "BlackY - " . $blackY. "\n";
//print "RedX - " . $redX. "\n";
//print "RedY - " . $redY. "\n";
if ($blackY == $redY)
{
imagejpeg($im2);
return;
}
else
{
//print "Rotate\n";
$im2 = imagerotate($im,1,$bg);
}
}
}
rotatepicture();
?>


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net