<?php function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100) { /* * source - obrazek jpeg * max_x - maksymalna szerokosc pomniejszonego obrazka * max_y - maksymalna dlugosc pomniejszonego obrazka * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100) */ if(exif_imagetype($source) == IMAGETYPE_JPEG) { $img_src = imagecreatefromjpeg($source); } elseif(exif_imagetype($source) == IMAGETYPE_GIF) { $img_src = imagecreatefromgif($source); } elseif(exif_imagetype($source) == IMAGETYPE_PNG) { $img_src = imagecreatefrompng($source); } else { http://www.php.net/die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG'); } $image_x = imagesx($img_src); $image_y = imagesy($img_src); if($image_x > $image_y) // Landscape { $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1; $ratio_y = $ratio_x; $move = 'y'; } else // Portrait { $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1; $ratio_x = $ratio_y; $move = 'x'; } $new_x = $image_x*$ratio_x; $new_y = $image_y*$ratio_y; $move_x = ($move == \"x\") ? ($max_x-$new_x)/2 : 0; $move_y = ($move == \"y\") ? ($max_y-$new_y)/2 : 0; $new_img = imagecreatetruecolor($max_x, $max_y); $background = imagecolorallocate($new_img, 255, 255, 255); imagefill($new_img, 0, 0, $background); imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y); if(exif_imagetype($save_image) == IMAGETYPE_JPEG) { imagejpeg($new_img, $save_image, $jpeg_quality); } elseif(exif_imagetype($save_image) == IMAGETYPE_GIF) { imagegif($new_img, $save_image); } elseif(exif_imagetype($save_image) == IMAGETYPE_PNG) { imagepng($new_img, $save_image); } http://www.php.net/echo '<img src=\"'.$save_image.'\" border=\"1\">'; } ?>
<? resizeImage('obrazek_duzy.jpg', MAX_WYMIAR_X, MAX_WYMIAR_Y, 'obrazek_maly_nowy.jpg', JAKOSC_JPEG); // (5 parametr opcjonalnie dla jpg) ?>
Sooper skrypt właśnie tego szukałem
Dzięki Tiraeth naprawdę bardzo mi pomogłeś
Polecam wszystkim
Jak to się ma do obsługi GIFów w GD2, bo słyszałem, że tam jej nie ma?
Czy ktoś testował funkcję pod tym kontem?
GD2 obsługuję GIFy.... testowałem pod kątem gifów na GD2/PHP5/APACHE2 i działało..
Celeme wyjaśnienia.
GD nie posiadało obsługi GIF'ów ze względów prawa patentowego. Jednakze prawo patentu zakończyło się w listopadzie zeszłego roku. I teraz w GD jest obsługa GIF'a, a nawet animowanego GIF'a. Niestety port na php nie posiada jeszcze wszystkich funkcji zaimplementowanych w standardzie - ale możliwe, że szybko dodadzą.
W każdym bądź razie w GD najnowszym jest pełna obsługa GIF'ów, z wyjatkiem animacji, która chwilowo nie jest dostępna pod php - ale już pracuje nad własną klasą do obsługi animacji, która poszerzy możliwości GD
Dowiedziałem się nawet że w 1.6 Zakończono obsługę GIF, żeby przywrócić w 2.0.28
Problem w tym, że na localhoscie (win - easyPHP1.7) mam wersję 2.0.18. Więc pytanie: Jak zainstalować nowszą? najprostsze metody mile widziane
---------
Tymczasowo zrobiłem tak: wrzuciłem do katalogu php nową wersję php 4.3.10 z php.net.
Tylko czemu wyświetla, w gd_info:
php jest strasznie w plecy jeśli chodzi o GD :/
musisz zainstalować sobie patcha udostępniajacego GIFy.
a zanim php obsługży w pełni i prawidłowo najnowsze GD to jeszcze poczekamy...a tak chciałbym juz teraz animowane gify robić...ehh...
Dzięki za info
Możesz rozwinąć kwestię patcha (skąd i jak?), bo jestem mało wprawiony w instalacjach php z apachem :/
Poza tym, znajomy Admin pisał mi, że na jego serwerze linux jest wersja 2.0.31, w planie 33, wraz z php 4.3.10, ale jeszcze testuje.
Więc chyba się da
Jeśli chodzi o gify, nie zależy mi na animacjach jedynie, żeby można było robić miniaturki gifów.
A mi to niedziala nic sie niewyswietla i nietworzy sie zaden plik O CO CHODZI ?
A może napiszesz co dokładnie nie działa?
po prostu nic sie niewyswitla ani nie tworzy mi zadnego pliku, wywoluje funkcje w ten sposob i nic
<?php resizeImage('1.jpg', 100, 100, '2.jpg', 5); ?>
mi wywala :
Fatal error: Call to undefined function: exif_imagetype()
co robić?
NOWY KOD KTÓRY NIE WYMAGA EXIF:
<?php function imgType($name) { if(http://www.php.net/substr($name, -4, 4) == '.jpg' || http://www.php.net/substr($name, -4, 4) == 'jpeg') { return \"IMAGETYPE_JPEG\"; } elseif(http://www.php.net/substr($name, -4, 4) == '.gif') { return \"IMAGETYPE_GIF\"; } elseif(http://www.php.net/substr($name, -4, 4) == '.png') { return \"IMAGETYPE_PNG\"; } } function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100) { /* * source - obrazek jpeg * max_x - maksymalna szerokosc pomniejszonego obrazka * max_y - maksymalna dlugosc pomniejszonego obrazka * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100) */ if(imgType($source) == \"IMAGETYPE_JPEG\") { $img_src = imagecreatefromjpeg($source); } elseif(imgType($source) == \"IMAGETYPE_GIF\") { $img_src = imagecreatefromgif($source); } elseif(imgType($source) == \"IMAGETYPE_PNG\") { $img_src = imagecreatefrompng($source); } else { http://www.php.net/die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG'); } $image_x = imagesx($img_src); $image_y = imagesy($img_src); if($image_x > $image_y) // Landscape { $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1; $ratio_y = $ratio_x; $move = 'y'; } else // Portrait { $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1; $ratio_x = $ratio_y; $move = 'x'; } $new_x = $image_x*$ratio_x; $new_y = $image_y*$ratio_y; $move_x = ($move == \"x\") ? ($max_x-$new_x)/2 : 0; $move_y = ($move == \"y\") ? ($max_y-$new_y)/2 : 0; $new_img = imagecreatetruecolor($max_x, $max_y); $background = imagecolorallocate($new_img, 255, 255, 255); imagefill($new_img, 0, 0, $background); imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y); if(imgType($save_image) == \"IMAGETYPE_JPEG\") { imagejpeg($new_img, $save_image, 100); } elseif(imgType($save_image) == \"IMAGETYPE_GIF\") { imagegif($new_img, $save_image); } elseif(imgType($save_image) == \"IMAGETYPE_PNG\") { imagepng($new_img, $save_image); } http://www.php.net/echo '<img src=\"'.$save_image.'\" border=\"1\">'; } ?>
no tak ale teraz w sumie można łatwo złapać błąd jak obrazek ma nazwę hello.jpg, a jest typu *.gif, nie można by naprzykład zastosować: getimagesize()?
paps
Skrypcik fajny, ale przy wielkich rozdzielczościach nie działa
W czym może być problem ?
max_execution_time lub memory_limit
potrzebna pamiec jak dobrze pamietam oblicza sie wzorem
((szerokosc x wysokosc x 3)/1024)/1024
To mam gdzies zadeklarować w skrypcie czy zmienić w php.ini ?
Wszystko jest napisane tu:
max_execution_time - http://php.idn.net.pl/ini-set
memory_limit - http://php.idn.net.pl/set-time-limit
Dzięki dzięki,
poprostu nie mam wglądu w php.ini, ale admin wszystko pozmieniał i jest OK
Ale taki temat może się komuś przydać, o ile skorzysta z wyszukiwarki
<?php imagejpeg($new_img, $save_image, 100); ?>
<?php imagejpeg($new_img, $save_image, $jpeg_quality); ?>
Faktycznie małe przeoczenie...
Oco chodzi z
--enable--exif
bo niewiem kaj to dać?
Należy skompilować php z obsługą funkcji exif_
Można jaśniej bo dalej niekapuje?
Może poczytaj php.net o rekompilacji/kompilacji Sam się na tym nie znam
a powiedzcie mi jak zrobic inteligentny resize, czyli np mam ustawiona tylko wartosc zeby szerokosc miala 150px i on wtedy inteligetnie dlugosc ustali wedlug oryginalnego obrazka np obrazek to plakat gdzie dlugosc wieksza jak szerokosc to wtedy np bedzie szerokosc 150 i on sam sobie ustawi ze dlugosc to 300pxow i odwrotnie lezace obrazki zeby mialy szer 150 a dlugosc np 100pxow.
odrazu powiem ze uzylem drugiej wersji skryptu
pozdrawiam
Skorzystajcie z wyszukiwarki - sam wkleiłem taką funkcję.
dobry skrypt ... ale
w $jpeg_quality najlepiej zastosować jakość 94 (nie więcej)
z doświadczenia wam to napisałem
tiraeth - świetna funkcja, wielkie dzięki, jednak mam kilka uwag
po pierwsze jeśli nazwa pliku jest napisana dużymi literami (wraz z rozszerzeniem) to wtedy funkcja nie rozpoznaje typu pliku (i się wywala), po drugie $jpeg_quality naprawde 90 wystarczy, a używanie 100 prowadzi to powstawania plików sporo większych, a po trzecie dlacego stworzony obrazek ma te białe marginesy (znaczy jak dam do zmniejszenie odrazek bardzo wysoki a wąski to pojawią się białe marginesy po bokach)
trochę zmieniłem skrypt, tak jak napisałem powyżej i mam nadzieję, że nie obrazisz się jak wkleję tu twój skrypt z moimi modyfikacjami
<?php function imgType($name) { $roz = http://www.php.net/strtolower(http://www.php.net/substr($name,-4)); if($roz == '.jpg' || $roz == 'jpeg' || $roz == '.jpe') { return "IMAGETYPE_JPEG"; } elseif($roz == '.gif') { return "IMAGETYPE_GIF"; } elseif($roz == '.png') { return "IMAGETYPE_PNG"; } } function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 90) { /* * source - obrazek jpeg * max_x - maksymalna szerokosc pomniejszonego obrazka * max_y - maksymalna dlugosc pomniejszonego obrazka * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100) */ if (imgType($source) == "IMAGETYPE_JPEG"){ $img_src = imagecreatefromjpeg($source); } else if (imgType($source) == "IMAGETYPE_GIF"){ $img_src = imagecreatefromgif($source); } else if (imgType($source) == "IMAGETYPE_PNG"){ $img_src = imagecreatefrompng($source); } else { http://www.php.net/die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG'); } $image_x = imagesx($img_src); $image_y = imagesy($img_src); if($image_x > $image_y) { // Landscape $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1; $ratio_y = $ratio_x; $move = 'y'; } else { // Portrait $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1; $ratio_x = $ratio_y; $move = 'x'; } $new_x = $image_x*$ratio_x; $new_y = $image_y*$ratio_y; $new_img = imagecreatetruecolor($new_x, $new_y); imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y); if(imgType($save_image) == "IMAGETYPE_JPEG") { imagejpeg($new_img, $save_image, $jpeg_quality); } else if (imgType($save_image) == "IMAGETYPE_GIF") { imagegif($new_img, $save_image); } else if (imgType($save_image) == "IMAGETYPE_PNG") { imagepng($new_img, $save_image); } http://www.php.net/echo '<img src="'.$save_image.'" border="1">'; } ?>
Sorka że odgrzewam temat, ale mam problem związany z generacją miniaturki.
Skrypt taki już jakiś czas temu sobie zrobiłem, ale odkryłem jedną ciekawą rzecz.
Wcześniej też się zdarzało, że na stronie znajdowałem miniaturki wypełnione całe na czarno.
Ale teraz podczas prac nad nową wersją strony, do uploadu postanowiłem wrzucić zdjęcia z komórki (nokia 3220), noi pięknie mi wrzuciło wszystkie miniaturki czarne, a przy okazji troche błędów.
Odpaliłem nawet powyższy skrypt noi to samo - a nawet gorzej, bo on już nic nie wygenerował
A sypie takimi błędami :
Prawdopodobie format zapisu tych zdjęć, pomimo że zbliżony do .jpg nie do końca nim jest. Może coś nie tak z typem mime. Założe się że jak je otworzysz w jakimś programie graficznym i zapiszesz ponownie jako .jpg to będzie działało.
Witam,
po mękach z włączeniem GD2 udało mi się uruchomić ten skrypt, naprawdę dobra robota.. ale jedna rzecz jest mi w nim potrzebna tzn:
teraz plik jest nadpisywany, a chciałbym aby zapisywał się w tym samym katalogu co plik źródłowy + katalog mini. czyli
plik : /obrazki/1.jpg
mini : /obrazki/mini/1.jpg
czy byłby ktoś chętny wprowadzić taką modyfikacje?
edit:
no i ewentualnie aby sprawdzal czy plik mini istnieje to wtedy skrypt niepotrzebnie by sie nie wykonywal..
pozdrawiam
<?php http://www.php.net/define(MAX_WYMIAR_X, 128); http://www.php.net/define(MAX_WYMIAR_Y, 128); $dir = './obrazki/'; $dir_mini = './obrazki/mini/'; if ($dh = http://www.php.net/opendir($dir)) { while (($file = http://www.php.net/readdir($dh)) !== false) { if(http://www.php.net/substr($file, -3) == 'jpg' && !http://www.php.net/file_exists($dir_mini . $file)) { resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file); } } http://www.php.net/closedir($dh); } ?>
dzięki Bakus! Nawet nie przypuszczałem, że to takie balane
No i nigdy nie może być za pięknie
<?php http://www.php.net/ini_set('display_errors',1); include 'db_engine.php'; include 'resize.inc.php'; http://www.php.net/define(MAX_WYMIAR_X, 100); http://www.php.net/define(MAX_WYMIAR_Y, 75); $db = new dbengine(); $db->polacz(); if (http://www.php.net/isset($_GET['id'])) // pokazuje wybrana { $gid = $_GET['id']; // pobranie katalogu fotek $db->DoSql("SELECT katalog FROM galerie WHERE id_galerii = $gid"); $kat = http://www.php.net/mysql_result($db->wynik,0,0); $dir = './galerie/'.$kat.'/'; $dir_mini = './galerie/'.$kat.'/mini/'; if ($dh = http://www.php.net/opendir($dir)) { while (($file = http://www.php.net/readdir($dh)) !== false) { http://www.php.net/echo $dir. $file. '<br>'; http://www.php.net/echo $dir_mini. $file. '<br>'; /* if(((substr($file, -3,3) == 'jpg') or (substr($file, -3,3) == 'JPG')) && !file_exists($dir_mini . $file)) { resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file); } elseif(file_exists($dir_mini . $file)) { echo '<img src="'.$dir_mini . $file.'" border="1">'; }*/ } http://www.php.net/closedir($dh); } $db->rozlacz(); } else // pokazuje wszystkie { $db->DoSQL("SELECT * FROM galerie"); $db->NRows; $w = $db->wynik; $n = $db->rows; while ($r=http://www.php.net/mysql_fetch_array($w)) { $id = $r['id_galerii']; $opis = $r['nazwa_galerii']; http://www.php.net/echo "<a href="index.php?s=galerie&id=$id">".$opis.'</a><br>'; } $db->rozlacz(); } // koniec wszystkich ?>
<?php function imgType($name) { if((http://www.php.net/substr($name, -4, 4) == '.JPG')OR(http://www.php.net/substr($name, -4, 4) == '.jpg')) { return "IMAGETYPE_JPEG"; } elseif(http://www.php.net/substr($name, -4, 4) == '.gif') { return "IMAGETYPE_GIF"; } elseif(http://www.php.net/substr($name, -4, 4) == '.png') { return "IMAGETYPE_PNG"; } } ?>
<?php if(((http://www.php.net/substr($file, -3,3) == 'jpg') or (http://www.php.net/substr($file, -3,3) == 'JPG')) ?>
<?php $typy = http://www.php.net/array("jpg", "png", "gif"); if(http://www.php.net/in_array(http://www.php.net/substr(http://www.php.net/strtolower($file), -3,3), $typy)) { if(http://www.php.net/file_exists($dir_mini . $file)) { http://www.php.net/print '<img src="'.$dir_mini . $file.'" border="1">'; }else{ resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file); } } ?>
Dzięki ponownie Bakus !
Skrypt uruchomiony, działą znakomicie
Tylko tak zastanawiam się, czy jest sposób na "następny" i "poprzedni" ? W końcu to pliki, mogące mieć różne nazwy, może być ich rożna ilość.. jest możliwe wogóle to do wykonania?
pozdrawiam
Witam podepnę się pod topic. Interesuje mnie autogenerowanie miniatur zdjęć, skrypt poniżej niestety nie działa.
<?php http://www.php.net/set_time_limit(0); http://www.php.net/error_reporting(0); http://www.php.net/define('DIR' , 'auto'); //gdzie są zdjęcia http://www.php.net/define('SUBDIR', 'auto/mini'); //podkatalog na miniatury http://www.php.net/define('PREFIX', 'm'); http://www.php.net/define('WIDTH', 160); http://www.php.net/define('HEIGHT', 120); $i = 0; http://www.php.net/mkdir(http://www.php.net/dir . SUBDIR); chmod(http://www.php.net/dir . SUBDIR, 0755); if ($handle = http://www.php.net/opendir(http://www.php.net/dir)) { while (false !== ($file = http://www.php.net/readdir($handle))) { if ($file != '.' && $file != '..' && $file != http://www.php.net/basename(__FILE__) && $file != SUBDIR) { $i++; $src_img = imagecreatefromjpeg(http://www.php.net/dir . $file); $dst_img = imagecreatetruecolor(WIDTH, HEIGHT); imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, WIDTH, HEIGHT, imagesx($src_img), imagesy($src_img)); $mini = PREFIX . $file; http://www.php.net/echo $i . '. Miniatura z pliku ' . $file . '...'; http://www.php.net/echo imagejpeg($dst_img, http://www.php.net/dir.SUBDIR.'/'.$mini, 100) && src_img ? 'OK' : 'FALSE'; chmod(http://www.php.net/dir.SUBDIR.'/'. $mini, 0755); http://www.php.net/echo "\n"; } } } ?>
Jak wynika z moich testów w funkcji jest błąd, dotyczący obliczania ratio.
O ile dla obrazka o rozmiarach 100x100 wywołanie funkcji:
resizeImage($img,20, 100, $imgMini);
zadziała prawidłowo, to:
resizeImage($img,100, 20, $imgMini);
już tak nie zadziała.
P.S. (do autora)
Czy mógłbyś w główym poście umieścić ostateczną wersję skryptu? W wątku co rusz przedstawiane są jakieś udoskonalenia, i zaorientowanie się we wszystkich jest bardzo czasochłonne.
Witam wszystkich sorka że tak wtrące ale czy nie lepiej by było tworzyć miniaturke w tym samym katalogu z dopiskiem:
ex.
katalog/test.jpg
katalog/test_m.jpg
A od czego jest parametr $save_image ? Przecież podajesz tam nazwę pliku, do którego ma zostać zapisana miniaturka
Niedługo może poprawię tą funkcję, narazie brak czasu
Witam,
Mam problem z tym skryptem. Jest to skrypt z pierwszego postu zmodyfikowany poprzez dodanie osobnego katalogu na miniaturki. I wlasnie w tym problem. Jesli katalog $dir i $dir_mini są jednakowe i wskazuja na docelowe miejsce uploadu duzego pliku to miniatura jest tworzona. Problem tylko w tym, ze jest tworzona w miejsce duzego pliku. Calosc wyglada tak:
<?php $dir = './obrazki/'; $dir_mini = './mini/'; function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100) { /* * source - obrazek jpeg * max_x - maksymalna szerokosc pomniejszonego obrazka * max_y - maksymalna dlugosc pomniejszonego obrazka * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100) */ if(exif_imagetype($source) == IMAGETYPE_JPEG) { $img_src = imagecreatefromjpeg($source); } elseif(exif_imagetype($source) == IMAGETYPE_GIF) { $img_src = imagecreatefromgif($source); } elseif(exif_imagetype($source) == IMAGETYPE_PNG) { $img_src = imagecreatefrompng($source); } else { http://www.php.net/die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG'); } $image_x = imagesx($img_src); $image_y = imagesy($img_src); if($image_x > $image_y) // Landscape { $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1; $ratio_y = $ratio_x; $move = 'y'; } else // Portrait { $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1; $ratio_x = $ratio_y; $move = 'x'; } $new_x = $image_x*$ratio_x; $new_y = $image_y*$ratio_y; $move_x = ($move == "x") ? ($max_x-$new_x)/2 : 0; $move_y = ($move == "y") ? ($max_y-$new_y)/2 : 0; $new_img = imagecreatetruecolor($max_x, $max_y); $background = imagecolorallocate($new_img, 255, 255, 255); imagefill($new_img, 0, 0, $background); imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y); if(exif_imagetype($save_image) == IMAGETYPE_JPEG) { imagejpeg($new_img, $save_image, $jpeg_quality); } elseif(exif_imagetype($save_image) == IMAGETYPE_GIF) { imagegif($new_img, $save_image); } elseif(exif_imagetype($save_image) == IMAGETYPE_PNG) { imagepng($new_img, $save_image); } http://www.php.net/echo '<img src="'.$save_image.'" border="1">'; } list($width, $height) = http://www.php.net/getimagesize($_FILES['img']['tmp_name']); // sprawdzamy czy podany plik zostal odebrany if (http://www.php.net/is_uploaded_file($_FILES['img']['tmp_name'])) { $nazwa_pliku=$_FILES['img']['name']; // wyciagamy rozszrzenie skopiowanego pliku $rozsz=http://www.php.net/explode(".",$nazwa_pliku); if($rozsz[1]=="gif" || $rozsz[1]=="jpg" || $rozsz[1]=="jpeg" || $rozsz[1]=="png" || $rozsz[1]=="JPG" || $rozsz[1]=="JPEG") { http://www.php.net/move_uploaded_file($_FILES['img']['tmp_name'], 'obrazki/' . $_FILES['img']['name']) or http://www.php.net/die('Error moving image...'); $file=$_FILES['img']['name']; resizeImage($dir . $file, 100, 100, $dir_mini . $file, 75); http://www.php.net/echo "$file<BR>"; http://www.php.net/echo "$dir<BR>"; http://www.php.net/echo "$dir_mini<BR>"; } else { http://www.php.net/echo "Niewlasciwy format pliku!"; } } ?>
Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 57 Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 61 Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 65
przy tym skrypcie do miniatur ( 2 wersji bez exif )
mam "problem" polegajacy na mojej niewiedzy, otorz :
Fatal error: Call to undefined function: imagecreatefromjpeg() in D:\USR\www\test\miniaturki.php on line 30
Nie masz biblioteki GD2+
http://tiraeth.info/blog/code/resize.phps
Przykład użycia:
<?php makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' ); ?>
Witam,
Znalazł ktoś sposób na miniaturki zdjęć z telefonu komórkowego?
Zawsze sypią się błędy.
<?php makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' ); ?>
<?php http://www.php.net/error_reporting(E_ALL); http://www.php.net/ini_set('display_errors', 1); ?> <?php /*** * Author : Marcin (tiraeth) Chwedziak * Contact : me[at]tiraeth.info * Website : <a href="http://tiraeth.info/blog/" target="_blank">http://tiraeth.info/blog/</a> * Created : 08/23/2006 4:41 pm * * * mixed makeThumbnail () * --- * imageHandle - name of file to create thumbnail * destWidth - destination image width * destHeight - destination image height * scaleType - scale, fit or resize * displayImage - true, if you want to display image or filename if you want to save image * jpegQuality - quality of jpeg image if you are creating jpeg file * returnType - destination image type (gif,jpeg,png,wbmp or default if you want to use source file type) */ function makeThumbnail ( $imageHandle, $destWidth, $destHeight, $scaleType = 'scale', $displayImage = true, $jpegQuality = 92, $returnType = 'default' ) { if ( $displayImage === true ) {} else { $savePath = $displayImage; $displayImage = false; } if ( http://www.php.net/file_exists($imageHandle) ) { $imgType = http://www.php.net/getimagesize($imageHandle); $imgType = $imgType[2]; switch ( $imgType ) { case 1 : $imgType = 'gif'; break; case 2 : $imgType = 'jpeg'; break; case 3 : $imgType = 'png'; break; case 6 : $imgType = 'bmp'; break; default : $imgType = 'illegal'; } if ( $imgType == 'illegal' ) { if ( $displayImage ) { http://www.php.net/echo 'Error: Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.'; } else { return http://www.php.net/array('error_message' => 'Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.'); } } $imgSrc = false; switch ( $imgType ) { case 'gif' : $imgSrc = @imagecreatefromgif($imageHandle); break; case 'jpeg' : $imgSrc = @imagecreatefromjpeg($imageHandle); break; case 'png' : $imgSrc = @imagecreatefrompng($imageHandle); break; case 'bmp' : $imgSrc = @imagecreatefromwbmp($imageHandle); break; } if ( $imgSrc == '' ) { if ( $displayImage ) { http://www.php.net/echo 'Error: Could not create image handle.'; } else { return http://www.php.net/array('error_message' => 'Could not create image handle.'); } } } else { if ( $displayImage ) { http://www.php.net/echo 'Error: File doesn't exists.'; } else { return array('error_message' => 'http://www.php.net/file doesn't exists.'); } } $imageWidth = imagesx($imgSrc); $imageHeight = imagesy($imgSrc); if ( $scaleType == 'scale' ) { // Scale if ( $imageWidth > $imageHeight ) { // Landscape $newWidth = $destWidth; $newHeight = http://www.php.net/ceil ( $imageHeight * $newWidth / $imageWidth ); } elseif ( $imageWidth < $imageHeight ) { $newHeight = $destHeight; $newWidth = http://www.php.net/ceil ( $imageWidth * $newHeight / $imageHeight ); } else { $newWidth = $destWidth; $newHeight = $destHeight; } $movex = 0; $movey = 0; $createWidth = $newWidth; $createHeight = $newHeight; } elseif ( $scaleType == 'fit' ) { // Fit if ( $imageWidth > $imageHeight ) { $newHeight = $destHeight; $newWidth = http://www.php.net/ceil ( $imageWidth * $newHeight / $imageHeight ); $movex = http://www.php.net/ceil ( ($newWidth - $destWidth)/2 )*-1; $movey = 0; } elseif ( $imageWidth < $imageHeight ) { $newWidth = $destWidth; $newHeight = http://www.php.net/ceil ( $imageHeight * $newWidth / $imageWidth ); $movex = 0; $movey = http://www.php.net/ceil ( ($newHeight - $destHeight)/2 )*-1; } else { $newWidth = $destWidth; $newHeight = $destHeight; $movex = 0; $movey = 0; } $createWidth = $destWidth; $createHeight = $destHeight; } else { // Resize $newWidth = $destWidth; $newHeight = $destHeight; $movex = 0; $movey = 0; $createWidth = $newWidth; $createHeight = $newHeight; } $imgDest = imagecreatetruecolor ( $createWidth, $createHeight ); imagecopyresampled ( $imgDest, $imgSrc, $movex, $movey, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight ); if ( $displayImage ) { http://www.php.net/header("Content-type: image/" . $imgType); } if ( $returnType == 'default' ) { switch ( $imgType ) { case 'gif' : if ( $displayImage ) { imagegif($imgDest); } else { imagegif($imgDest, $savePath); } break; case 'jpeg' : if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); } else { imagegif($imgDest, $savePath); } break; case 'png' : if ( $displayImage ) { imagepng($imgDest); } else { imagepng($imgDest, $savePath); } break; case 'bmp' : if ( $displayImage ) { imagewbmp($imgDest); } else { imagewbmp($imgDest, $savePath); } break; } } else { switch ( $returnType ) { case 'gif' : if ( $displayImage ) { imagegif($imgDest); } else { imagegif($imgDest, $savePath); } break; case 'jpeg' : if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); } else { imagegif($imgDest, $savePath); } break; case 'png' : if ( $displayImage ) { imagepng($imgDest); } else { imagepng($imgDest, $savePath); } break; case 'bmp' : if ( $displayImage ) { imagewbmp($imgDest); } else { imagewbmp($imgDest, $savePath); } break; } } if ( $displayImage == false ) { return http://www.php.net/array( 'filename' => $imageHandle, 'save_path' => $savePath, 'image_width' => $imageWidth, 'image_height' => $imageHeight, 'return_width' => $newWidth, 'return_height' => $newHeight, 'image_type' => $imgType, 'return_type' => ( $returnType == 'default' ) ? $imgType : $returnType, 'jpeg_quality' => ( $returnType == 'jpeg' || ( $returnType == 'default' && $imgType == 'jpeg' ) ) ? $jpegQuality : false, ); } } makeThumbnail ( '1.jpg', 100, 100, 'scale', true, 100, 'jpg' ); ?>
a jak przerobić ten skrypt aby jeśli mamy zdjęcie wieksze niż 1024x768 to skalował je do tych wymiarów i tworzył później miniaturkę i dodawał wpis do bazy danych z linkiem do małego i dużego zdjęcia??
pomoże mi ktoś czy nie
http://pl2.php.net/manual/pl/function.getimagesize.php
sprawdzasz jakie ma rozmiary i jak sa za duze to zmniejszasz i dodajesz do bazy a jak nie sa to tylko dodajesz
moze ktos wrzucic ten kod na phpfi.com, bo forum cos psuje kody zrodlowe i mi nie chodza ;/
<? /* Funkcja która zapisuje przekazywany w formularzu obrazek do odpowiedniego format
u oraz rozdzielczości. Funkcja posiada 4 (cztery) argumenty, $roz - rodzielczość w jakiej ma być zapisany nowy obraz $img - nazwa pola z którego przekazywany jest obrazek $sciezka - sciezka zapisu obrazka $nnazwa - nowa nazwa nadana obrazkowi po stronie serwera */ function zap_img_x($roz, $img, $sciezka, $nnazwa){ ///echo "Jaka rozdzielczość - $roz<br>"; //echo "Jaka nazwa pliku - $img<br>"; //echo "Jaka ścieżka zapisu - $sciezka<br>"; //echo "Nowa nazwa pliku - $nnazwa<br>"; //1.) Określam parametry zdjęcia - typ, zapisuje ściężkę tmp_name do zmiennej - plik $typ = $_FILES['img']['type']; $plik = $_FILES['img']['tmp_name']; //echo "PLIK - $plik<br>"; //2.) Określam szerokość w pixelach $x = $roz; //echo "X - $x<br>"; //3.) Nadaję nową nazwę dla zdjęcia $mojaNazwa1 = $nnazwa . '.jpg'; //echo "Nazwa - $mojaNazwa1<br>"; //5.) Zapisuje obraz w odpowiednim formacie //Przetwarzanie obrazka z formatu jpg i jpeg if (http://www.php.net/ereg("image/jpeg", $typ) or http://www.php.net/ereg("image/pjpeg", $typ)){ $zdj = ImageCreateFromJpeg($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $y = http://www.php.net/ceil($zdjy*($x/$zdjx)); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,120); imagedestroy($zdj); //echo "$zdjx, $zdjy, $x, $y, $nowezdj<br> $sciezka . $mojaNazwa1 ok"; } //Przetwarzanie obrazka z formatu gif elseif(http://www.php.net/ereg("image/gif", $typ)){ $zdj = ImageCreateFromGIF($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $y = http://www.php.net/ceil($zdjy*($x/$zdjx)); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100); imagedestroy($zdj); //echo "ok"; } //Przetwarzanie obrazka z formatu png elseif(http://www.php.net/ereg("image/png", $typ)){ $zdj = ImageCreateFromPng($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $y = http://www.php.net/ceil($zdjy*($x/$zdjx)); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100); imagedestroy($zdj); //echo "ok"; } else{ http://www.php.net/echo("Niepoprawny format"); http://www.php.net/exit; } } ?>
a jaj mam problem :/ caly kod przechodzi nie wywala bledu.. a miniaturki nie ma :/
...sprawdzalem "gdzie zapisuje" podaje nawet sciezke z home.. /home/user//sa..... nie wiem co sie dzieje :/
Trochę zmieniłem w/w funkcję. Teraz jeśli podana szerokość lub wysokość jest większa jak ta w oryginalnym obrazku to zostaje ona zmniejszona do tej mniejszej (oryginalnej).
Kod
<?php function img_typ($name) { $name = http://www.php.net/strtolower(http://www.php.net/substr($name, -4, 4)); if($name == '.jpg' OR $name == 'jpeg') { return ".jpg"; } elseif($name == '.gif') { return ".gif"; } elseif($name == '.png') { return ".png"; } } ///////////////////////////////////////////////////////////////////////////////////// function mini($in, $max_width, $max_height, $out, $jakosc) { $typ = img_typ($in); if ($typ == ".jpg") {$img_src = imagecreatefromjpeg($in);} elseif($typ == ".gif") {$img_src = imagecreatefromgif($in); } elseif($typ == ".png") {$img_src = imagecreatefrompng($in); } $x = imagesx($img_src); $y = imagesy($img_src); if($x > $y) { $xr = ($x > $max_width)? $max_width/$x : 1; $yr = $xr; } else { $yr = ($y > $max_height)? $max_height/$y : 1; $xr = $yr; } $new_x = $x*$xr; $new_y = $y*$yr; $new_img = imagecreatetruecolOR($new_x, $new_y); $background = imagecolORallocate($new_img, 255, 255, 255); imagefill($new_img, 0, 0, $background); imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $x, $y); $typ = img_typ($out); if ($typ == ".jpg") {imagejpeg($new_img, $out, $jakosc);} elseif($typ == ".png") { imagepng($new_img, $out, $jakosc);} elseif($typ == ".gif") { imagegif($new_img, $out); } } ?>
Przepraszam, ale mam pytanie. I który skrypt wykorzystać? Ale też ten do tych duuuużych obrazków. Z góry dziękuję
Witam!.
Nie ważne z którego skryptu korzystam, nie działają one przy większych obrazkach.
czy znacie jakies skrypty które poradzą sobie z większymi od 1024*768
Z góry przepraszam za odkop, ale skrypt (post 1) nadal wydaje się dobry, a mam z nim problem.
Otóż wrzucam go do NetBeans i w tych liniach wskazuje mi na błąd:
$move_x = ($move == \"x\") ? ($max_x-$new_x)/2 : 0;
$move_y = ($move == \"y\") ? ($max_y-$new_y)/2 : 0;
Od znaku # skrypt staje się szary (taki sam kolor mają u mnie komentarze, np. te po //). Po wrzuceniu na serwer klasy z tą funkcją, skrypt się zatrzymuje.
Jakieś sugestie?
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)