Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie informacji o obrazie stworzonym przez funkcje imagecreate
Force
post 23.12.2007, 22:55:11
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 6
Dołączył: 17.05.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
sniezny_wilk
post 23.12.2007, 22:59:34
Post #2





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


  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. ?>


Ten post edytował sniezny_wilk 23.12.2007, 23:08:27


--------------------
Go to the top of the page
+Quote Post
Force
post 23.12.2007, 23:02:46
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 6
Dołączył: 17.05.2007

Ostrzeżenie: (0%)
-----


Problem w tym, że ta funkcja działa tylko na plikach, a nie na zasób obrazu z funkcji imagecreate*
Go to the top of the page
+Quote Post
sniezny_wilk
post 23.12.2007, 23:07:37
Post #4





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował sniezny_wilk 23.12.2007, 23:15:23


--------------------
Go to the top of the page
+Quote Post
glorification
post 24.12.2007, 15:56:40
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 2
Dołączył: 22.12.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Force
post 24.12.2007, 17:57:47
Post #6





Grupa: Zarejestrowani
Postów: 55
Pomógł: 6
Dołączył: 17.05.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Force 24.12.2007, 18:00:03
Go to the top of the page
+Quote Post
glorification
post 24.12.2007, 18:33:39
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 2
Dołączył: 22.12.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował glorification 24.12.2007, 19:28:19
Go to the top of the page
+Quote Post
sniezny_wilk
post 24.12.2007, 23:20:16
Post #8





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Jedynym minusem jest niepotrzebnie "rzeźbienie" po transferze, jednak jeśli masz duży limit to dobre rozwiązanie.


--------------------
Go to the top of the page
+Quote Post
borovsky
post 5.11.2009, 01:22:13
Post #9





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.09.2007

Ostrzeżenie: (0%)
-----


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();

Ten post edytował borovsky 5.11.2009, 01:26:59
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:46