Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie informacji o obrazie stworzonym przez funkcje imagecreate
Forum PHP.pl > Forum > PHP
Force
Witam

W jaki sposób mogę sprawdzić wymiary (w pikselach) i rozmiar (w bajtach) obrazka stworzonego przez jedną z funkcji imagecreate.
Próbowałem tak ale to nie działa
  1. <?php
  2. $obrazek = file_get_contents('http://www.adres.pl/obrazek.jpg');
  3. $obrazek = imagecreatefromstring($obrazek);
  4. getimagesize($obrazek) ;
  5. ?>
sniezny_wilk
  1. <?php
  2.  
  3. $dane = getimagesize($obrazek) ;
  4. echo ($dane[0]); //szerokosc
  5. echo "<br/>"; 
  6. echo ($dane[1]); //wysokosc
  7. echo "<br/>"; 
  8. echo ($dane["bits"]); // EDIT: moja pomyłka, to są bity, a nie rozmiar pliku
  9.  
  10. ?>
Force
Problem w tym, że ta funkcja działa tylko na plikach, a nie na zasób obrazu z funkcji imagecreate*
sniezny_wilk
Zatem, czy nie może być tak:
  1. <?
  2. $dane = getimagesize("http://www.adres.pl/obrazek.jpg") ;
  3. echo ($dane[0]); //szerokosc
  4. echo "<br/>"; 
  5. echo ($dane[1]); //wysokosc
  6. ?>


EDIT: nie wiem czy to optymalne rozwiązanie, ale rozmiar w bajtach można pobierać tak:
  1. <?
  2. $plik = 'http://www.adres.pl/obrazek.jpg';
  3. $naglowek = get_headers($plik, 1);  
  4.  
  5. $rozmiar = $naglowek['Content-Length'];
  6. echo ($rozmiar);
  7. ?>
glorification
sprobój tego

imagesx - szerokosc obrazka
imagesy - wysokosc obrazka ...

<?php

$img = imagecreatetruecolor(300, 200);

echo imagesx($img); // 300

?>


wielosc obrazka mozna sprawdzic po zapisaniu go do katalogu za pomoca np. imagepng
i uzywajac standardowych opcji dla takich operacji dla plikow ...

mam nadzieje ze pomoglem ...winksmiley.jpg

powodzenia
g.
Force
Cytat(sniezny_wilk @ 23.12.2007, 23:07:37 ) *
Zatem, czy nie może być tak:
  1. <?
  2. $dane = getimagesize("http://www.adres.pl/obrazek.jpg") ;
  3. echo ($dane[0]); //szerokosc
  4. echo "<br/>"; 
  5. echo ($dane[1]); //wysokosc
  6. ?>

Też tak robiłem ale jeżeli sprawdzałem getimagesize ten obrazek a potem wczytawałem go funkcją imagecreatefromstring to obrazek pobierał się 2 razy więc to rozwiązanie odpada.


Cytat(glorification @ 24.12.2007, 15:56:40 ) *
sprobój tego

imagesx - szerokosc obrazka
imagesy - wysokosc obrazka ...

<?php

$img = imagecreatetruecolor(300, 200);

echo imagesx($img); // 300

?>
wielosc obrazka mozna sprawdzic po zapisaniu go do katalogu za pomoca np. imagepng
i uzywajac standardowych opcji dla takich operacji dla plikow ...

mam nadzieje ze pomoglem ...winksmiley.jpg

powodzenia
g.

Problem wymiarów rozwiązany. Pozostaje problem rozmiaru (w bajtach). Zapis na dysk będzie bardzo spowalniał działanie skryptu. Czy jest możliwość sprawdzenia tych danych jakąś konkretną funkcją bez takich sztuczek?
glorification
wrzucenie pliku na dysk to nic strasznego ... zasadniczo ten plik i tak masz w pamieci do momentu gdy nie wyrzucisz go do przegladarki za pomoca imagepng($twojobrazek) lub podobnej funkcji dla innego pliku graficznego, pamiec ta zwracasz do systemu uzywajac imagedestroy($twojobrazek) ... robiac cos nieco innego a mianowicie uzywajac imagepng($twojobrazek,'twojObrazek.png') zapisujsz go(obrazek) sobie na dysku, sprawdzasz jego wielkosc za filesize a potem mozesz automatycznie pozegnac sie z nim za pomoca unlink wyswietlajac ten obrazek na stronie liijke wczesniej ... pamiec uzyta do zapisu obrazka zostaje niemal natychmiast zwolniona a ty masz wielkosc tego obrazka i mozesz sie do niego odniesc nie tylko wyswietlajac go do przegladarki 
le poprzez link jak do zwyklego pliku graficznego ...
jak masz jakies dane na podstawie ktorych robiony jest ten obrazek to zawsze mozesz go sobie potem nadpisac albo usunac i stworzyc nowy w tym samym miejscu i znow miec mozliwosc wziecia jego wielkosci za pomoca filesize ... normalne zasady zapisu pliku na serwerze stosuja sie takze przy plikach graficznych (eg.uprawinienia);

pozdrawiam
g.
sniezny_wilk
Jedynym minusem jest niepotrzebnie "rzeźbienie" po transferze, jednak jeśli masz duży limit to dobre rozwiązanie.
borovsky
Cytat(Force @ 24.12.2007, 17:57:47 ) *
Pozostaje problem rozmiaru (w bajtach). Zapis na dysk będzie bardzo spowalniał działanie skryptu. Czy jest możliwość sprawdzenia tych danych jakąś konkretną funkcją bez takich sztuczek?

Witam, mam podobny problem.
generuję obrazek za pomocą imagecreate, imagejpg
problem moj jest taki, że muszę przesłać informację o wielkości pliku w headerze. (pobieram we flashu obrazek, który widzi wielkość pliku (plik zwrócony przez php) jako wartość 0; gdy prześlę w headerze content-length=99999 to flash widzi, że obrazek ma 99999 Bajtów, co jest logiczne)
gdy zastosowuję sztuczkę z kładzeniem pliku na dysk, następuje niemożliwość przesłania nagłówka Content-Length
mój log:
Cytat
[05-Nov-2009 00:35:11] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/xio46160/public_html/zaprojektujemy/borovsky/neo/resampleImage.php:81) in /home/xio46160/public_html/zaprojektujemy/borovsky/neo/resampleImage.php on line 85


a "output started" to linijka, gdzie robię imagejpeg(obrazek, ścieżka)

czyli te rozwiązanie się wyklucza, bo nie mogę nic "wypluć" zanim nie prześlę nagłówka...


teraz tak: jeśli normalne rozwiązanie to jest niemożliwe, to pytam, czy może być jakiś inny powód, dla którego flash widzi wielkość obrazka dynamicznie generowanego przez php jako liczbę 0?

a może jest jakaś biblioteka graficzna php która obsługuje podawanie rozmiaru pliku jpg, który ma być "wypluty"


Bardzo proszę o pomoc!
Pozdrawiam, Adam

edit// juz wiem, wystarczy
ob_start();
oraz ob_end_flush();
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.