Trouble with image orientation
I have images on a website on wich i am fooling arround with a bit.
i want to make thumbs from bigger pictures, that i worked out.
but when resizing the pictures to smaller versions they tend to get displayed rotated because the orientation is set wrong.
I found below function to repair that issue and i tried to add some code to it so it will work also with other then jpg files.
the files i am currently trying to resize are all jpg btw.
I bet you all can see i am no master at php.... forgive me for that....
i hope someone can point me away from the error i am getting with below function.
i get the following error:
"Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2988 bytes) "
The line that gives the error is
Code (php)
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
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
function correctImageOrientation($filename, $type) {
//echo $filename; exit;
if (function_exists('exif_read_data')) {
$exif = exif_read_data($filename);
//echo $exif['Orientation'].'<br>';
//print_r($exif);
if($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
if($orientation != 1){
switch ($type)
{
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_GIF:
$img = imagecreatefromgif($filename);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($filename);
break;
case IMAGETYPE_JPG:
$img = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_WBMP:
$img = imagecreatefromwbmp($filename);
break;
}
$deg = 0;
switch ($orientation) {
case 3:
$deg = 180;
break;
case 6:
$deg = 270;
break;
case 8:
$deg = 90;
break;
}
//echo $img;
//echo $deg;
//exit;
if ($deg) {
$img = imagerotate($img, $deg, 0);
}
// then rewrite the rotated image back to the disk as $filename
switch ($type)
{
case IMAGETYPE_JPEG:
imagejpeg($img, $filename);
break;
case IMAGETYPE_GIF:
imagegif($img, $filename);
break;
case IMAGETYPE_PNG:
imagepng($img, $filename);
break;
case IMAGETYPE_JPG:
imagepng($img, $filename);
break;
case IMAGETYPE_WBMP:
image2wbmp($img, $filename);
break;
}
} // if there is some rotation necessary
} // if have the exif orientation info
} // if function exists
}
//echo $filename; exit;
if (function_exists('exif_read_data')) {
$exif = exif_read_data($filename);
//echo $exif['Orientation'].'<br>';
//print_r($exif);
if($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
if($orientation != 1){
switch ($type)
{
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_GIF:
$img = imagecreatefromgif($filename);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($filename);
break;
case IMAGETYPE_JPG:
$img = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_WBMP:
$img = imagecreatefromwbmp($filename);
break;
}
$deg = 0;
switch ($orientation) {
case 3:
$deg = 180;
break;
case 6:
$deg = 270;
break;
case 8:
$deg = 90;
break;
}
//echo $img;
//echo $deg;
//exit;
if ($deg) {
$img = imagerotate($img, $deg, 0);
}
// then rewrite the rotated image back to the disk as $filename
switch ($type)
{
case IMAGETYPE_JPEG:
imagejpeg($img, $filename);
break;
case IMAGETYPE_GIF:
imagegif($img, $filename);
break;
case IMAGETYPE_PNG:
imagepng($img, $filename);
break;
case IMAGETYPE_JPG:
imagepng($img, $filename);
break;
case IMAGETYPE_WBMP:
image2wbmp($img, $filename);
break;
}
} // if there is some rotation necessary
} // if have the exif orientation info
} // if function exists
}
Can you check in phpinfo() what your memory limit is? It seems your run out of allocated memory.
You can increase 'memory_limit' with a php.ini or with ini_set.
Gewijzigd op 21/01/2023 13:49:49 door - Ariën -
Stom van mij, ik ga er automatisch al van uit dat alles op internet tegenwoordig in het engels is.
Ik zou je memory_limit eens verhogen naar 256 MB. Met 128 MB zit je vaak al erg krap. Vooral als je grote afbeeldingen wilt bewerken.
Gewijzigd op 21/01/2023 14:33:53 door - Ariën -
tnx, ik ga dat proberen. ik dacht dat 128mb al vrij veel was
Gewijzigd op 21/01/2023 14:40:58 door - Ariën -
gelukt met ini_set('memory_limit','256M');
heel erg bedankt.
alle thumbs worden nu mooi weer rechtop neergezet.
Toevoeging op 21/01/2023 14:41:58:
Misschien een handige functie voor anderen....
Toevoeging op 21/01/2023 14:45:12:
- Ariën - op 21/01/2023 14:39:36:
Het ligt er een beetje aan wat je allemaal tegelijkertijd draait. Als je een uitgebreide Joomla of Wordpress draait, of een webshop, dan kan ik mij indenken dat 128 MB opeens erg krap is. Als het een zelfgebouwde site is, dan kan je ook kijken of je het een en ander kan optimaliseren. Misschien heb je wel queries die in een loop draaien, en kan je er een JOIN van maken. Of heb je ellenlange array's die overbodig lang zijn.
Ik heb ongetwijfelt overbodige stukken code in mijn programmeerwerk zitten, maar het is maar hobbymatig geknutsel....
Elke optimalisatieslag is een goede slag, zeg ik maar altijd.
- Ariën - op 21/01/2023 14:39:36:
Het ligt er een beetje aan wat je allemaal tegelijkertijd draait. Als je een uitgebreide Joomla of Wordpress draait, of een webshop, dan kan ik mij indenken dat 128 MB opeens erg krap is. Als het een zelfgebouwde site is, dan kan je ook kijken of je het een en ander kan optimaliseren. Misschien heb je wel queries die in een loop draaien, en kan je er een JOIN van maken. Of heb je ellenlange array's die overbodig lang zijn.
Ik vraag me af of veel mensen tegenwoordig nog steeds zelfgebouwde sites gebruiken? Ik vraag me gewoon af, geen ruzie.
Ja! Meer vrijheid, geen extra leercurve om een pakket te leren kennen.
Van Noord op 01/02/2023 15:24:16:
Ik vraag me af of veel mensen tegenwoordig nog steeds zelfgebouwde sites gebruiken? Ik vraag me gewoon af, geen ruzie.
Meer dan je denkt denk ik.
Het is een mooi tijdverdrijf als je noodgedwongen hele dagen thuis zit.
Enne, even goeie vrienden hoor.
Van Noord op 01/02/2023 15:24:16:
Ik vraag me af of veel mensen tegenwoordig nog steeds zelfgebouwde sites gebruiken? Ik vraag me gewoon af, geen ruzie.
Soms heb je geen keuze. Ik ben schaker. Vind maar eens een site waar je rechtstreeks de uitslagen kunt invullen en de stand berekenen.
Zelf maken is dan de oplossing :)
Jan
Maar goed, ik denk dat dit een discussie is die wel in een ander topic mag worden gestart.
Gewijzigd op 02/02/2023 13:00:22 door - Ariën -
Iedere site is zelfgebouwd. Een site bouwt zichzelf niet.
Laatst las ik ergens een opmerking van iemand die zoiets zei als "vroeger toen websites nog met html en php gemaakt werden". Dat is dus iemand die denkt er verstand van te hebben, maar geen flauw benul heeft waar ie over praat.