Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> GD / Rozmiar obrazu przed wyśietleniem
deejay4net
post 24.07.2009, 14:15:50
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


Witam, nie wiem czemu ale wydaje mi się że to głupie pytanie
tym bardziej że pisaniem skryptów zajmuję się nie od dziś.
Nie mogę sprawdzić rozmiaru przetworzonego obrazu w GD.

mam oto taki kod
  1. <?php
  2. $newImage = imagecreatetruecolor( $userWidth , $userHeight );
  3. $tmpImage = imagecreatefromjpeg ( $_FILES['image']['tmp_name'] );
  4. imagecopyresampled( $newImage , $tmpImage, 0, 0, 0, 0, ( ( $width > $userWidth ) ? $userWidth : $width ), ( ( $height > $userHeight ) ? $userHeight : $height ), $width, $height );
  5. ?>


nie przychodzi mi w tym miejscu do głowy żadna funkcja która zwróci mi rozmiar obrazu
znajdującego się w $newImage .
Możliwe że to tylko przemęczenie ale proszę o szybką podpowiedź smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
dotangelo
post 24.07.2009, 14:19:38
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 12.04.2007
Skąd: Wągrowiec

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


Jak już zapiszesz ten plik, to możesz:
  1. <?php
  2. getimagesize('filename');
  3. ?>


Oprócz tego sprawdź czy GD w ogóle udostępnia funkcję pozwalające sie dowiedzieć rozmiar obrazka. Wydaje mi się że powinno smile.gif
Go to the top of the page
+Quote Post
deejay4net
post 24.07.2009, 14:36:48
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


Cytat(dotangelo @ 24.07.2009, 15:19:38 ) *
  1. <?php
  2. getimagesize('filename'[/b]);
  3. ?>


Jak wskazuje parametr jest to nazwa pliku , btw to zwraca szerokość, wysokość i typ mime,
ja potrzebuje rozmiar w bajtach , bitach cokolwiek z dzieleniem i mnożeniem sobie poradzę przecież smile.gif

No i wracając dalej parametrem tej funkcji jest string a [b]imagecreatetruecolor
zwraca [b]resource
dlatego nie mam pojęcia jak to ugryźć a potrzebuje tego rozmiaru przed wyświetleniem pliku sad.gif

Ten post edytował deejay4net 24.07.2009, 14:38:13
Go to the top of the page
+Quote Post
john_doe
post 24.07.2009, 14:53:16
Post #4





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


http://pl.php.net/filesize
Go to the top of the page
+Quote Post
maly_swd
post 24.07.2009, 15:13:02
Post #5





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


a przez przypadek GD w $newImage nie trzyma danych w formacie pseodu BMP... czyli nieskompresowane. 1 px to 3 bajty?

mozesz zawsze przechwycic przez OB_.. to co zwraca imagejpeg($newImage); i sprawdzic przez count() ile ma znakow:)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Darti
post 24.07.2009, 15:31:25
Post #6





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


  1. <?php
  2. function getNeededMemoryForImageCreate($width, $height, $truecolor) {
  3.  return $width*$height*(2.2+($truecolor*3));
  4. }
  5. ?>


kod zaczęrnięty z manuala: http://pl2.php.net/manual/pl/function.imag...color.php#66975
zmienna $truecolor ma chyba wartości 0 lub 1

Ten post edytował Darti 24.07.2009, 15:33:13


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
deejay4net
post 24.07.2009, 16:20:59
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


Cytat(Darti @ 24.07.2009, 16:31:25 ) *
  1. <?php
  2. function getNeededMemoryForImageCreate($width, $height, $truecolor) {
  3.  return $width*$height*(2.2+($truecolor*3));
  4. }
  5. ?>


kod zaczęrnięty z manuala: http://pl2.php.net/manual/pl/function.imag...color.php#66975
zmienna $truecolor ma chyba wartości 0 lub 1


Użyłem funkcji i teraz tak.. zwróciła mi wartość 41600000
z pliku który przyjął rozmiar 921 Kb

użyłem w sposób
  1. <?php
  2. getNeededMemoryForImageCreate( imagesx($newImage),imagesy($newImage),1 )
  3. ?>



gdy użyłem zera jako ostatniego parametru otrzymałem 17600000

Wydaje mi się że nie to chciałem otrzymać ;D
Go to the top of the page
+Quote Post
erix
post 24.07.2009, 16:23:05
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Właśnie to.

To że plik ma rozmiar mniejszy od wartości wyliczonej, to tylko wynik zastosowanej kompresji. Pamięć na obraz liczona jest w BITMAPIE.

Zapisz sobie ten sam obrazek w formacie BMP, wtedy będziesz wiedział, ile trzeba pamięci. >:>


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deejay4net
post 24.07.2009, 17:17:04
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


wnioskuję to że niepotrzebna debata się stwarza ;D Bo o to chodzi że ja przed zapisem muszę znać ten rozmiar. Żeby wiedziec czy optymalizować go dalej czy zapisywać na serwerze.. smile.gif
Go to the top of the page
+Quote Post
maly_swd
post 24.07.2009, 20:08:57
Post #10





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


Przeczytaj co napisalem wczesniej:

...mozesz zawsze przechwycic przez OB_.. to co zwraca imagejpeg($newImage); i sprawdzic przez count() ile ma znakow:)

tu masz wpis:
http://forum.php.pl/index.php?s=&showt...st&p=622539

wystarczy go zmienic:

  1. <?php
  2. $d=imagecreatefromjpeg('tapeta.jpg');
  3.  
  4. imagejpeg($d);
  5. $con=ob_get_clean();
  6. echo strlen($con);
  7. ?>


Ten post edytował maly_swd 24.07.2009, 20:14:00


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Darti
post 25.07.2009, 00:13:36
Post #11





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


a może tak : ?
  1. <?php
  2. echo 'memory_get_usage: '.memory_get_usage()."<br>";
  3. $d=imagecreatefromjpeg('t.jpeg');
  4. echo 'memory_get_usage: '.memory_get_usage()."<br>";
  5. unset($d);
  6. echo 'memory_get_usage: '.memory_get_usage()."<br>";
  7. ?>


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
erix
post 25.07.2009, 10:03:01
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ok, ale to Ci nie zwróci wagi skompresowanego obrazka. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deejay4net
post 25.07.2009, 15:29:40
Post #13





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

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


  1. <?php
  2. imagejpeg($d);
  3. ?>


Nie bardzo smile.gif

Bo ja mam taki kod końcowy który wyrzuca mi pobieranie więc nie mogę wysyłać niczego przed tym

  1. <?php
  2. @header("Content-type: {$mime}");
  3.                @header("Content-Disposition: attachment; filename=\"{$filename} (Wygenerowane przez {$settings['servis_name']}) Quality {$q}.{$extension}\"");
  4.                imagejpeg( $newImage , null , $quality );
  5. ?>


gdzie $newImage musi być już poprawnym obrazem dopasowanym do odpowiedniej wielkości. No tak jak napisałem wyżej.

Cytat
Bo o to chodzi że ja przed zapisem muszę znać ten rozmiar


Czyli to w sumie kompresja GD ale bardziej pod kątem wagi pliku niż pod rozmiar. Bo zmniejszenie rozmiaru nie zawsze daje nam odpowiedni rozmiar smile.gif

No chyba że zacznę obliczać zmniejszając szerokość i jakość proporcjonalnie według określonego percenta ;D
Ok dzisiaj na świeżo luknę i dam znać czy coś zdziałałem smile.gif

Ten post edytował deejay4net 25.07.2009, 15:31:38
Go to the top of the page
+Quote Post
maly_swd
post 25.07.2009, 17:54:52
Post #14





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


przeczytaj to ze zrozumieniem i dostosuj do tego co masz u siebie. Ten sposob zadziala na 1000%

  1. <?php
  2. $d=imagecreatefromjpeg('tapeta.jpg');
  3.  
  4. imagejpeg($d);
  5. $con=ob_get_clean();
  6. echo strlen($con);
  7. ?>



// wstawiając kod używaj BBCode
// ayeo


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
wookieb
post 25.07.2009, 18:02:43
Post #15





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(maly_swd @ 25.07.2009, 18:54:52 ) *
Ten sposob zadziala na 1000%


O jezu... żałosne... nawet nie sprawdziłeś
  1. <?php
  2. $img=imagecreatefromjpeg('foto_main.jpg');
  3.  
  4. imagejpeg($img);
  5. $contents=ob_get_clean();
  6. echo "Ilość znaków: ".strlen($contents)."\n";
  7. echo "Rozmiar: ".filesize('foto_main.jpg')."\n";
  8. ?>


Masz swój 1000% wynik
Kod
Ilość znaków: 13477
Rozmiar: 61460

No chyba, że zamiast % chciałes napisać promile a to inna sprawa.


--------------------
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: 14.08.2025 - 01:54