hoi ik heb een scriptje dat een autocontrast op een plaatje toepast a la Photoshop's gelijknamige functie, en dat heb ik eerst lokaal getest, op een centrino met pentium-Mobile 1.6Ghz 512mb ram op winXP met php 4.3.3. De tijd om een 500x400 plaatje te berekenen kost ca. 5.8 seconden. Dit terwijl winamp en shoutcast lekker aan het streamen zijn.
daarnaast heb ik het script op onze webserver getest. dit is een dual Xeon 2.6 Ghz, 1gb ram, en kgeloof 1mb cache per processor. draait op Redhat (versie weet ik ff niet), met een SCSI raid. php 4.3.2. kortom snelle jongen.
ik heb zojuist getest omdat er verder geen bezoekers op de server zijn en er geen verdere apps draaien die cpu-kracht zuigen (kan ik checken via putty). hier kost hetzelfde script ca. 7.6 seconden. dat is zo'n 1.8 seconden langzamer!
ik snap er geen drol van. die server zou sneller moeten zijn naar mijn idee, of op zijn minst, als-ie fout geconfigureerd zou kunnen zijn (wat-ie niet is zover ik kan overzien) minstens even snel. maar langzamer!?
ok misschien is het php, en moet ik php even allebei op 4.3.3 of hoger hebben voor DE test. maar ik zou willen vragen: zijn er enorme verschillen in processoren (Xeon versus Pentium-M), OS'en, waarbij winXP gunstig eruit komt, en/of php versie / platforms??
btw dit is het script, mochten mensen willen testen (beetje rommeltje):
daarnaast heb ik het script op onze webserver getest. dit is een dual Xeon 2.6 Ghz, 1gb ram, en kgeloof 1mb cache per processor. draait op Redhat (versie weet ik ff niet), met een SCSI raid. php 4.3.2. kortom snelle jongen.
ik heb zojuist getest omdat er verder geen bezoekers op de server zijn en er geen verdere apps draaien die cpu-kracht zuigen (kan ik checken via putty). hier kost hetzelfde script ca. 7.6 seconden. dat is zo'n 1.8 seconden langzamer!
ik snap er geen drol van. die server zou sneller moeten zijn naar mijn idee, of op zijn minst, als-ie fout geconfigureerd zou kunnen zijn (wat-ie niet is zover ik kan overzien) minstens even snel. maar langzamer!?
ok misschien is het php, en moet ik php even allebei op 4.3.3 of hoger hebben voor DE test. maar ik zou willen vragen: zijn er enorme verschillen in processoren (Xeon versus Pentium-M), OS'en, waarbij winXP gunstig eruit komt, en/of php versie / platforms??
btw dit is het script, mochten mensen willen testen (beetje rommeltje):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
| <?php ini_set("precision", 12); // ========================================== // Timing functies voor script exection time // ========================================== function ss_timing_start ($name = 'default') { global $ss_timing_start_times; $ss_timing_start_times[$name] = explode(' ', microtime()); } function ss_timing_stop ($name = 'default') { global $ss_timing_stop_times; $ss_timing_stop_times[$name] = explode(' ', microtime()); } function ss_timing_current ($name = 'default') { global $ss_timing_start_times, $ss_timing_stop_times; if (!isset($ss_timing_start_times[$name])) { return 0; } if (!isset($ss_timing_stop_times[$name])) { $stop_time = explode(' ', microtime()); } else { $stop_time = $ss_timing_stop_times[$name]; } // do the big numbers first so the small ones arent lost $current = $stop_time[1] - $ss_timing_start_times[$name][1]; $current += $stop_time[0] - $ss_timing_start_times[$name][0]; return $current; } // ========================================== // settings // ========================================== ss_timing_start(); $outlo = 0; // laagste output-grens $outhi = 255; // hoogste output-grens $skiptreshold = 0.001; // sla een tint over indien deze heel weinig voorkomt (default = 0.001) // ========================================== // open het originele plaatje // ========================================== $img = imagecreatefromjpeg ("test3.jpg"); $imgw = imagesx($img); $imgh = imagesy($img); // ========================================== // maak een histogram van het plaatje // ========================================== for ($y = 0; $y < $imgh; $y++) { for ($x = 0; $x < $imgw; $x++) { $pxl = imagecolorat($img, $x, $y); // colorindex / rgb-waarde van pixel(x,y) $rgb = imagecolorsforindex($img, $pxl); // rgb-waarde in array-vorm $gst = $rgb['red']*0.3 + $rgb['green']*0.59 + $rgb['blue']*0.11; // converteer naar grijswaarde //$gst = round(min(255, max(0, $gst))); $hist[$gst]++; // tel aantal van deze grijswaardes } } // ========================================== // zoek horizontaal en verticaal bereik uit // ========================================== $mini = 255; $maks = 0; $totpixels = $imgw * $imgh; $darkest = 255; // donkerste grijstint (we werken naar beneden toe) $lightest = 0; // lichtste grijstint (we werken omhoog) for ($v = 0; $v < 255; $v++) { // -------------------------------------- // zoek bereik van aantal pixels uit // dus de grijswaarde die het minst voorkomt // en de grijswaarde die het meest voorkomt // -------------------------------------- $mini = min($mini, $hist[$v]); $maks = max($maks, $hist[$v]); // -------------------------------------- // zoek bereik van donkerste tot lichtste tint // -------------------------------------- if ($hist[$v] / $totpixels < $skiptreshold) continue; // indien een grijswaarde ZO weinig voorkomt, skip deze dan $darkest = min($darkest, $v); $lightest = max($lightest, $v); } $scale = ($maks-$mini) / 100; // ========================================== // bereken nieuwe plaatje // ========================================== $dst = ImageCreateTrueColor ($imgw, $imgh); $range = ($outhi - $outlo) / ($lightest - $darkest); for ($y = 0; $y < $imgh; $y++) { for ($x = 0; $x < $imgw; $x++) { $pxl = imagecolorat($img, $x, $y); // colorindex / rgb-waarde van pixel(x,y) $rgb = imagecolorsforindex($img, $pxl); // rgb-waarde in array-vorm $outr = min($outhi, max(outlo, ($rgb['red'] - $darkest) * $range)); $outg = min($outhi, max(outlo, ($rgb['green'] - $darkest) * $range)); $outb = min($outhi, max(outlo, ($rgb['blue'] - $darkest) * $range)); $col = imagecolorresolve($dst, $outr, $outg, $outb); imagesetpixel($dst, $x, $y, $col); } } $fg = imagecolorallocate($dst, 0, 0, 0); imagestring ($dst, 2, 2, 2, "Berekening kostte " . ss_timing_current() . " seconden.", $fg); header ("Content-type: image/jpeg"); imagejpeg ($dst); imagedestroy ($dst); // ========================================== // sluit plaatje // ========================================== imagedestroy ($img); exit (); ?> |
[ Voor 8% gewijzigd door js303 op 16-03-2004 02:23 ]