Ik heb een probleem met het plaatsen van watermerken op grote jpg bestanden. Met groot bedoel ik dan dat het fout gaat vanaf 2Mb.
Om te kijken waar het fout gaat heb ik een aantal echo's in de code (zie-onder) gezet om te zien waar het fout gaat. Bij kleinere bestanden werkt alles wel goed.
Als het fout gaat dan word de "3" niet meer ge-echoed. Vreemd, want dit werkte wel goed als ik kleinere files van een watermerk voorzie. Als ik regel 7 en 10 echter omdraai dan blijft het fout gaan op regel 10.
Mijn redenatie: er is ergens een buffer of een stuk geheugen wat volloopt als regel 7 en 10 worden uitgevoerd, om het even in welke volgorde. Error reporting staat op 'E_ALL' maar er worden geen errors gegeven. Ik heb om het probleem verder te isoleren met diverse try-catch constructies geprobeerd, maar ik ben niets wijzer geworden, er worden nergens errors gegeven en de '3' word niet ge-echoed.
Ik heb zitten denken dat ik dit misschien met ini_set zou kunnen oplossen, ik heb geen variabelen kunnen vinden waarvan ik denk dat ze hier iets mee te maken hebben.
Als er iemand is die mij de goede kant op kan helpen zou dat erg fijn zijn.
Om te kijken waar het fout gaat heb ik een aantal echo's in de code (zie-onder) gezet om te zien waar het fout gaat. Bij kleinere bestanden werkt alles wel goed.
Als het fout gaat dan word de "3" niet meer ge-echoed. Vreemd, want dit werkte wel goed als ik kleinere files van een watermerk voorzie. Als ik regel 7 en 10 echter omdraai dan blijft het fout gaan op regel 10.
Mijn redenatie: er is ergens een buffer of een stuk geheugen wat volloopt als regel 7 en 10 worden uitgevoerd, om het even in welke volgorde. Error reporting staat op 'E_ALL' maar er worden geen errors gegeven. Ik heb om het probleem verder te isoleren met diverse try-catch constructies geprobeerd, maar ik ben niets wijzer geworden, er worden nergens errors gegeven en de '3' word niet ge-echoed.
Ik heb zitten denken dat ik dit misschien met ini_set zou kunnen oplossen, ik heb geen variabelen kunnen vinden waarvan ik denk dat ze hier iets mee te maken hebben.
Als er iemand is die mij de goede kant op kan helpen zou dat erg fijn zijn.
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
| function watermark($SourceFile, $WatermarkFile, $SaveToFile = NULL, $deleteOriginal = NULL){ echo' 0 '; //use image string method to accept different file formats (jpg, gif a.s.o.) $image_string = @file_get_contents($SourceFile) or exit('Cannot open image file.'); echo '1 '; $image = @imagecreatefromstring($image_string) or exit('Not a valid image format.'); echo '2 '; $watermark = @imagecreatefrompng($WatermarkFile) or exit('Cannot open the watermark file.'); echo '3 '; imageAlphaBlending($watermark, false); imageSaveAlpha($watermark, true); $imageWidth=imageSX($image); $imageHeight=imageSY($image); $watermarkWidth=imageSX($watermark); $watermarkHeight=imageSY($watermark); //calculate new width for watermark $scaledWidth = $imageWidth/3; $factor = $watermarkWidth/$scaledWidth; $scaledHeight = $watermarkHeight/$factor; //create scaled watermark $scaledWatermark = imageCreateTrueColor($scaledWidth, $scaledHeight); imagesavealpha($scaledWatermark, true); $trans_colour = imagecolorallocatealpha($scaledWatermark, 0, 0, 0, 127); imagefill($scaledWatermark, 0, 0, $trans_colour); imagecopyresampled($scaledWatermark,$watermark,0,0,0,0,$scaledWidth, $scaledHeight,$watermarkWidth,$watermarkHeight); //paste watermark onto target image $coordinate_X = ( $imageWidth - 5) - ( $scaledWidth); $coordinate_Y = ( $imageHeight - 5) - ( $scaledHeight); imagecopy($image, $scaledWatermark, $coordinate_X, $coordinate_Y, 0, 0,$scaledWidth,$scaledHeight); //save to file and clean up if($deleteOriginal) unlink($SourceFile); if($SaveToFile) imagejpeg ($image, $SaveToFile, 100); imagedestroy($image); imagedestroy($watermark); imagedestroy($scaledWatermark); } |