![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, korzystając z funkcji imagecreatefromjpeg() otrzymuję błąd o przekroczeniu pamięci
Kod Fatal error: Allowed memory size of 67108864 bytes exhausted Serwerownia odpisała abym przerobił skrypt tak aby zużywał mniej pamięci więc teraz moje pytanie jak mogę utworzyć miniaturkę w php nie korzystając z tej funkcji lub zmniejszając zużycie tej pamięci? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witaj, niestety trochę zbyt mało podałeś informacji (IMG:style_emoticons/default/smile.gif)
Pokaż kod jakim przerabiasz grafikę. Musisz tam mieć mocno coś zamotane skoro przekraczasz 64mb pamieci RAM. |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Musisz tam mieć mocno coś zamotane skoro przekraczasz 64mb pamieci RAM. Skoro wczytuje obrazek przez funkcję i imagecreatefromjpeg() a obrazek ten ma ponad 60MB to raczej nic dziwnego, że mu pamięć przekracza
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Skoro wczytuje obrazek przez funkcję i imagecreatefromjpeg() a obrazek ten ma ponad 60MB to raczej nic dziwnego, że mu pamięć przekracza Nie wiemy czy dlatego mu przekracza czy nie bo nic więcej nie napisał - ani nie pokazał kodu ani nie podał rozmiaru obrazka itd. Równie dobrze może być to coś innego przed samym wczytaniem, które dobije skrypt. @autor pokaż kod dla pewności i napisz jakiej wielkości fotki tam ładujesz - wtedy się coś poradzi. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
64 MiB to obraz o rozdzielczości ok. 22 megapikseli po wczytaniu do pamięci, czyli nic specjalnie nadzwyczajnego. Jedyny sposób to przetwarzanie obrazu po kawałku, a nie w całości na raz.
GD się do tego nie nada, zaś bindingi PHP dla ImageMagicka nie obsługują chyba wszystkich opcji. Odpalając Imagicka z poziomu konsoli, możesz przy pomocy parametru -limit określić maksymalne wykorzystanie pamięci. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
No więc zdjęcia ma 6,45MB wymiary 2912x4368
Korzystałem z klasy do tworzenia miniaturek http://phpthumb.gxdlabs.com/ a potem zmieniłem cały proces tworzenia miniaturek do
ale poprawy nie ma. Może to być jeszcze związane z tym, że skrypt pobiera pliki w katalogu i po kolei w pętli tworzy te miniaturki
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zrób mały debug i zobacz ile pamięci zużywa przy każdej iteracji (memory_get_peak_usage(true)) i stosuj imagedestroy($canvas) i imagedestroy($org) po każdym zapisie.
EDIT: bzdurę dalej napisałem przepraszam - zapomniałem o pętli. Ten post edytował Sephirus 18.06.2013, 15:18:28 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
nic nie pomaga ;/
|
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Jak sobie wyobrażasz zmieścić to w pamięci?
2912x4368 = 12719616 x 3 bajty na kolor = 38158848 = ~37 MiB Nigdzie nie napisałeś, że zwalniasz dany zasób, to po dwóch iteracjach koniec. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 17:51 |