![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Problem pierwszy:
Mam taki kod: Kod if (is_uploaded_file($_FILES['plik']['tmp_name'])) { if ($_FILES['plik']['size'] > $max_rozmiar) {echo 'Błąd! Plik jest za duży!'; } } if ($_FILES['plik']['type'] == 'image/jpeg' or $_FILES['plik']['type'] == 'image/jpg' or $_FILES['plik']['type'] == 'image/png' or $_FILES['plik']['type'] == 'image/gif') {echo 'Odebrano plik ! <br>'; $plik_tmp = $_FILES['plik']['tmp_name']; $plik_nazwa = $_FILES['plik']['name']; $plik_rozmiar = $_FILES['plik']['size']; if(is_uploaded_file($plik_tmp)) { move_uploaded_file($plik_tmp, "mapy/$plik_nazwa"); echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!"; $ImgSize = getimagesize("mapy/$plik_nazwa"); $a = $ImgSize[1]; $b = $ImgSize[0]; $c = $ImgSize[2]; $plik_nazwa2 = "m_".$plik_nazwa; echo $a.$b; echo '<br>'.$c; if ($b>=380) {$x=380; $czynnik = $b/$x; $y = $a/$czynnik;} elseif ($b<380 AND $a>400) {$y=400; $czynnik = $a/$y; $x = $b/$czynnik;} else {$x = $b; $y = $a;} ceil ($x); ceil ($y); switch ($c) { case '1': $SrcImg = imagecreatefromgif("mapy/$plik_nazwa"); $thumb = imagecreatetruecolor($x,$y); imagecopyresampled($thumb,$SrcImg,0,0,0,0,$x,$y,$b,$a); imagegif($thumb, "mapy/$plik_nazwa2"); break; case '2': $SrcImg = imagecreatefromjpeg("mapy/$plik_nazwa"); $thumb = imagecreatetruecolor($x,$y); imagecopyresampled($thumb,$SrcImg,0,0,0,0,$x,$y,$b,$a); imagejpeg($thumb, "mapy/$plik_nazwa2"); break; case '3': $SrcImg = imagecreatefrompng ("mapy/$plik_nazwa"); $thumb = imagecreatetruecolor($x,$y); imagecopyresampled($thumb,$SrcImg,0,0,0,0,$x,$y,$b,$a); imagepng($thumb, "mapy/$plik_nazwa2"); break;} } } else { echo "zły rodzaj pliku";} Służy mi on do uploadu plików i wykonywania miniaturek (obiera plik z panel. Wszystko działa ok, ale problem zaczyna się przy próbie przesłania dużego PNG (2886x1288, 159 kb) - wyskakuje błąd "Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 3717168 bytes)". OK, myślę sobie, limit_memory na 8M, na Apache nie wystarcza. Ale czemu ta sama grafika w GIFIE (te same wymiary, większy "ciężar") da się załadować? Problem z PNG numer 2: Używając powyższego skryptu otrzymuję piękną miniaturkę PNG (w przypadku PNG), która niekiedy zajmuje więcej miejsca na dysku (w kb) niż dużo większy oryginał (większy w znaczeniu wyższy i szerszy). Nie za bardzo rozumiem - czy PNG sprawdza się tylko w przypadku naprawdę dużych plików graficznych? Poza tym próbowałem (co najbardziej mnie boli) zrobić najrozsądniejszy ruch - ładować PNG, a miniaturkę wykonywać jako JPG. W tym celu zmieniłem w powyższym kodzie, w ostatnich linijkach: 'imagepng' na 'imagejpeg', a i tak dalej otrzymywałem miniaturki w PNG. Ktoś może mi wyjaśnić czemu? Ten post edytował charlie-cherry 7.02.2008, 16:54:52 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 206 Pomógł: 21 Dołączył: 1.09.2006 Skąd: Edinburgh Ostrzeżenie: (0%) ![]() ![]() |
Nie laduj takich wielkich obrazkow, albo zwieksz limit pamieci.
Przy 24 bitowej konwersji twoj obrazek wymaga 3 * 2886 * 1288 bajtow pamieci, co na oko daje ponad 11MB ![]() A co do wielkosci obrazka wynikowego poczytaj: http://www.phptoys.com/e107_plugins/conten....php?content.46 Ten post edytował specialplan 7.02.2008, 16:58:22 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 5.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale czemu ta sama grafika w GIFIE (te same wymiary, większy "ciężar") da się załadować? Bo GIF dysponuje niesamowicie okrojoną paletą barw (taka jego specyfika). Do reprezentacji jednego piksela GIFa w pamięci wystarczy jeden bajt a w przypadku PNG jeden piksel reprezentują trzy bajty dla kanałów RGB + jeden bajt na kanał alpha (z reguły bo ogólnie możliwa skala to 1-64 bitów na piksel). Cytat czy PNG sprawdza się tylko w przypadku naprawdę dużych plików graficznych? Stopień kompresji w PNG nie jest regulowany tak jak np. w JPEG. Stopień kompresji zależy głównie od struktury obrazu a nie od jego rozmiarów. Cytat 'imagepng' na 'imagejpeg', a i tak dalej otrzymywałem miniaturki w PNG. Ktoś może mi wyjaśnić czemu? No to jest dziwne choć moim skromnym zdaniem nie ma bata żeby było tak jak napisałeś. Może po prostu w nazwie 'mapy/$plik_nazwa2' dałeś standardowo rozszerzenie PNG i myślisz, że to PNG mimo to, że jest to JPEG? ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 15.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wyjaśnienia. Niestety, duże pliki graficzne (a raczej mapy) są ważnym punktem budowanej przeze mnie witryny.
Samael - faktycznie przegapiłem rozszerzenie pliku. Dzięki za zwrócenie uwagi. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:26 |