ďťż

[php] miniaturka zdjęcia

       

Podstrony


telcocafe

Mając taki kod:
<HTML> <BODY> <IMG src = ""> </BODY> </HTML>
oraz zdjęcie obrazek.jpg o wymiarach 800 x 600 jak sprawić żeby w IMG pojawiła się miniaturka tego zdjęcia w wymiarach 80 x 60 zrobiona w locie (za pomocą PHP oczywiście)? Wiem, że jest w googlach bo szukałem ale nie rozumiem tego co tam pisze :/ Więc jeśli możecie to prosze napiszcie mi jak to zrobić.



http://pl.php.net/ma...atefromjpeg.php
http://pl.php.net/ma...tetruecolor.php
http://pl.php.net/ma...pyresampled.php
http://pl.php.net/ma...n.imagejpeg.php
http://pl.php.net/ma...magedestroy.php
I to chyba wszystko.
Najpierw pierwszą funkcją otwierasz obrazek wyjściowy, potem (2) tworzysz pusty obrazek, (3) kopiujesz z jednego do drugiego ze zmianą rozdzielczości, (4) wysyłasz do użytkownika, (5) usuwasz z pamięci.

tak trudno poszukac...
http://www.php.net/m...pyresampled.php - pierwszy przyklad
http://www.php.net/m...ref.imagick.php - pierwszy przyklad - najprostsze wyjscie (Ale przeczytaj sobie ta ramke)
//kutar szybszy ;]
Użytkownik Deadeye edytował ten post 06 lipiec 2007, 12:17
i mam taki błąd :
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 2816 bytes) in E:\Public\przegladarka2\obr.php on line 6 co z tym zrobić ?



i jeszcze jedno pytanie, mam taki skrypt:
<?PHP $name = $_GET['url']; $size = GetImageSize($name); header("content-type: image/jpg"); $obrazek = ImageCreateFromJpeg($name); $nowy = ImageCreateTrueColor(($size[0] * 60 / $size[1]), 60); ImageCopyResized($nowy, $obrazek, 0, 0, 0, 0,($size[0] * 60 / $size[1]),60,$size[0],$size[1]); ImageJPEG($nowy,'',100); imagedestroy($nowy); imagedestroy($obrazek); ?>
Co zrobić żeby zamieniał także inne pliki graficzne ? (gif, bmp itp)


i jeszcze jedno pytanie, mam taki skrypt:
<?PHP $name = $_GET['url']; $size = GetImageSize($name); header("content-type: image/jpg"); $obrazek = ImageCreateFromJpeg($name); $nowy = ImageCreateTrueColor(($size[0] * 60 / $size[1]), 60); ImageCopyResized($nowy, $obrazek, 0, 0, 0, 0,($size[0] * 60 / $size[1]),60,$size[0],$size[1]); ImageJPEG($nowy,'',100); imagedestroy($nowy); imagedestroy($obrazek); ?>
Co zrobić żeby zamieniał także inne pliki graficzne ? (gif, bmp itp)


Witam

http://tiny.pl/fs2w
poczytaj też o funkcjach:
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng

Pozdrawiam

działa, dzięki ... z co z bmp ?! nie ma na to funkcji ?

no i co zrobić z tym błędem ? :
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 2816 bytes) in E:\Public\przegladarka2\obr.php on line 6
plk obr.php wygląda tak:
<?PHP $name = $_GET['url']; $size = GetImageSize($name); header("content-type: image/jpg"); $obrazek = ImageCreateFromJpeg($name); $nowy = ImageCreateTrueColor(($size[0] * 60 / $size[1]), 60); ImageCopyResized($nowy, $obrazek, 0, 0, 0, 0,($size[0] * 60 / $size[1]),60,$size[0],$size[1]); ImageJPEG($nowy,'',100); imagedestroy($nowy); imagedestroy($obrazek); ?>
Błąd jak zauważyłem pojawia się tylko przy zdjęcieach o dużych rozmiarach :/ co można z tym zrobić ? (acha ... mniaturek jest robionych 9 jedna po drugiej tzn 9 kolejno następujących po sobie wywołań pliku obr.php może jest jakiś błąd ze zwalnianiem pamięci ? ale przy małych obrazkach np 200 KB jest wszystko okej :P)

masz za malo przydzielonej pamieci na serverze - operacje zwiazane z obrazkami zzeraja duzo pamieci.
kto uzywa bmp w internecie? :blink:

albo prościej już za pomocą htmla zrobić coś takiego
<img src=... width=80 height=60>
To najprostsze rozwiązanie jeśli wywala ci błędy z pamięcią.


albo prościej już za pomocą htmla zrobić coś takiego
<img src=... width=80 height=60>
To najprostsze rozwiązanie jeśli wywala ci błędy z pamięcią.

Taaa... tylko jak zdjęcie ma 3 mega to co? Przeglądarka musi ściągnąć całość i dopiero sama sobie pomniejsza.

co z bmp ?! nie ma na to funkcji ? W internecie nie używa się BMP, gdyż BMP to format bezstratny i taki plik zajmuje bardzo dużo miejsca.

Poczytaj sobie tu o obrazkach: http://pl.php.net/ma...l/ref.image.php

imagecreatefromgd2 — Create a new image from GD2 file or URL
imagecreatefromgd2part — Create a new image from a given part of GD2 file or URL
imagecreatefromgd — Create a new image from GD file or URL
imagecreatefromgif — Create a new image from file or URL
imagecreatefromjpeg — Create a new image from file or URL
imagecreatefrompng — Create a new image from file or URL
imagecreatefromstring — Create a new image from the image stream in the string
imagecreatefromwbmp — Create a new image from file or URL
imagecreatefromxbm — Create a new image from file or URL
imagecreatefromxpm — Create a new image from file or URL


to był tylko najprostszy przykład :>

troche lipka z tymi miniaturkami ... bo w takiej sytuacji jeśli mam zniejszać fotki najpierw po to żeby miały mało megabajtów a potem po to żeby zrobić miniaturke to bez sensu :/ ... ale przecież są przeglądarki grafik na necie i na pewno da się to jakoś ominąć ... btw, u mnie na localhoście to samo mi wywala, więc czy na pewno są to jakieś ograniczenia serwera ?.


to był tylko najprostszy przykład :>
nie wazne jak prosty przyklad podasz, HTML jest renderowany serverside wiec taki kod spowoduje sciagniecie calego obrazka.


troche lipka z tymi miniaturkami ... bo w takiej sytuacji jeśli mam zniejszać fotki najpierw po to żeby miały mało megabajtów a potem po to żeby zrobić miniaturke to bez sensu :/ ... ale przecież są przeglądarki grafik na necie i na pewno da się to jakoś ominąć ... btw, u mnie na localhoście to samo mi wywala, więc czy na pewno są to jakieś ograniczenia serwera ?.
sprawdz to http://www.php.net/m...ni.memory-limit


bo w takiej sytuacji jeśli mam zniejszać fotki najpierw po to żeby miały mało megabajtów a potem po to żeby zrobić miniaturke to bez sensu
no właśnie, bez sensu. A po co chcesz najpierw zmniejszać żeby rozmiar był mniejszy, a potem żeby miniaturę zrobić. Nie możesz raz zmniejszyć? :blink:


no właśnie, bez sensu. A po co chcesz najpierw zmniejszać żeby rozmiar był mniejszy, a potem żeby miniaturę zrobić. Nie możesz raz zmniejszyć? blink.gif
hehe ... kutar, ja wcale tego nie chce zmniejszać ... wrzucam zdjęcie na serwer i pojawia się ono na stronie, a żeby nie ładowało sie przez 5 minut to chce zmniejszyć rozmiar fotki, ale jak ktoś będzie chciał ściągnąć zdjęcie to chce żeby mógł ściągnąć je w orginalnej rozdzielczości :) ... więc wychodzi na to że musiałbym mieć dwa komplety fotek jedne małe drugie duże czyli pojawia się burdel na dysku i niepotrzebne jego zaśmiecanie skoro w php są na to funkcje :) ... poza tym rozwiązanie nie jest wygodne ponieważ nie moge wrzucić jednego zdjęcia przez formularz ponieważ musze dołączyć jeszcze dodatkowe zdjęcie czyli miniaturke którą musze wcześniej przygotować samemu czyli zupełnie nie to o co mi chodzi :) ... więc musze jakoś ominąć ten limit tylko nie wiem narazie jak :P

No rozumiem, chyba... No ale przecież na serwer możesz wrzucić oryginalne zdjęcie, a miniaturkę generować "w locie" dynamicznie. Nawet nie musisz jej nigdzie zapisywać, ani u siebie na dysku , ani na serwerze, ani nawet skrypt nie musi jej zapisywać. Robisz skrypt, np . image.php , do którego możesz wysłać zmienną GET, która będzie mówiła, które zdjęcia ma pomniejszyć. Skrypt pomnijesza zdjęcie i wysyła bezpośrednio tylko do przeglądarki użytkownika i nie zapisuje na serwerze. Wtedy co prawda pomniejszenie obrazka musi być wywoływane za każdym razem gdy ktoś chce ten obrazek zobaczyć, ale przynajmniej masz mniej plików na serwerze.


No rozumiem, chyba... No ale przecież na serwer możesz wrzucić oryginalne zdjęcie, a miniaturkę generować "w locie" dynamicznie. Nawet nie musisz jej nigdzie zapisywać, ani u siebie na dysku , ani na serwerze, ani nawet skrypt nie musi jej zapisywać. Robisz skrypt, np . image.php , do którego możesz wysłać zmienną GET, która będzie mówiła, które zdjęcia ma pomniejszyć. Skrypt pomnijesza zdjęcie i wysyła bezpośrednio tylko do przeglądarki użytkownika i nie zapisuje na serwerze. Wtedy co prawda pomniejszenie obrazka musi być wywoływane za każdym razem gdy ktoś chce ten obrazek zobaczyć, ale przynajmniej masz mniej plików na serwerze.
gdybys przeczytal ten temat, to bys zauwazyl ze twoj wywod jest na tyle oczywisty ze wszyscy tutaj wiedza juz ze mozna tak robic ;) OGGY_Lwiatko_89 ma problem z ograniczem pamieci tylko.

do autora- dalej masz te problemy z pamiecia? wrzuc kod


gdybys przeczytal ten temat, to bys zauwazyl ze twoj wywod jest na tyle oczywisty ze wszyscy tutaj wiedza juz ze mozna tak robic ;) OGGY_Lwiatko_89 ma problem z ograniczem pamieci tylko.
Otóż z ostatniego postu OGGY_Lwiatko_89 wywnioskowałem, że jednak tego nie wie :P Dlatego ten "mój wywód" :P

niestety nadal mam ten problem :/ ... kod już podawałem tutaj natomiast skrypt jest wywoływany przez no takie wywołanie:
<IMG src="obr.php?url=1.jpg">
Oczywiście plik 1.jpg istnieje i jest w tym samym folderze co plik obr.php (dokładnie to co powiedział kutar).

Ale rozwiązanie problemu coś czuje łatwe nie będzie ponieważ z tego co się dowiedziałem parser php ma ograniczenie do 8 MB dla wykonywanego skryptu a obrazek JPG o wadze 2 - 3 MB po dekompresji (wymaganej do zmniejszenia rozmiarów obrazka) zajmuje aż 20 MB. Jak coś wymyśle żeby to ominąć to dam znać :P ... Jak ktoś wcześniej na to wpadnie to niech pisze :P

jak masz server z dostepem do shella, to zwyczajnie mozesz uzywac dowolnego programu konwenterujacego rozmiar/wielkosc obrazka z linii komend, wywolywac go przez php i zwracac link do utworzonej miniaturki. w ten sposob trzeba byloby trzymac miniaturki na dysku, ale to i tak wydajniej niz tworzyc miniaturke za kazdym razem

mam strone na serwerze ovh.org :) ... nie ma shella :/ ... myśle ża mało jest darmowych serwerów z taką opcją bo przecież ile to pamięci zżera.

http://www.ktos.info...make_thumb.phps

ta, jeszcze shella do darmowego konta chciales...

:) .. hehe ... no taki skrypt to ja już mam :) ... co prawda mniej rozbudowany ... ale zasada działania jest identyczna :) ... tu potrzeba czegoś niekonwencjalnego bo funkcja ImageCopyResised() (ablo raczej ImageCreateFromGif() itp) zużywa za dużo pamięci :) ... więc zaśmiecanie tematu coraz bardziej rozbudowanymi skryptami dającymi ten sam efekt nie ma moim zdaniem specjalnego sensu :) ...

tak sobie myślałem ... może da się pracować z obrazem jak ze strumieniem ? wtedy nie byłoby problemów z pamięcią tylko wtedy trzeba by było mieć właśną funkcje zmniejszającą obraz no i pytanie jak to zrobić ? usuwać co drugi bit ? co osiem bitów usuwać następne osiem ? ... może ktoś wie na jakiej zasadzie zapisuje się i odzytuje obrazy gif, jpg i png ?

Nie no,to chyba nie ma sensu. Wrzucać foty po 3 mega na serwer? Przynajmniej kawałek należałoby je zmniejszyć. Tak poza tym to nie szkoda Ci serwa? Takie każdorazowe wyciąganie miniaturek z tak objętościowych plików jest ciężką robotą! Ja mam galerię na dwa foldery i wszystko działa,nie ma żadnego burdelu,jak to określiłeś. Wielkość miniaturek również jest niewielka więc nie ma mowy o niepotrzebnym zaśmiecaniu dysku . . .

ale jeśli wrzucam zdjęcia przez formularz na stronie to musiałbym wrzucać dwie foty (zdjęcie właściwe i miniaturke którą wcześniej muszę zrobić w jakimś programie graficznym) troche mało wygodne. natomiast masz racje że szkoda serwera żeby za każdym razem robić miniaturke, posłucham cię i zrobie dwa foldery (zdjęcia i miniaturki), ale zdjęcie w formularzu niech będzie wrzucane tylko jedno a miniaturka robiona automatycznie przez skrypt i zapisywana w folderze z miniaturkami. pytanie tylko ... jak to zrobić żeby działało ? dosyć poważnie myśle o pracy ze zdjęciem jak ze strumieniem i wykorzystaniu własnej funkcji do przeskalowania zdjęcia. jak ktoś znajdzie coś ciekawego na ten temat (w poprzednim poście wyjaśniełem szerzej to zagadnienie) to niech wkleja tutaj albo linki niech zapoda :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.