Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][gd] Problem z tworzeniem miniatur, jpeg - brak miniatury, png - czarna miniatura
kazag
post
Post #1





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


Witam ponownie,
mam skrypt tworzący miniatury z wczesniej wysłanych na serwer obrazków. Miniatury są tworzone w ten sposób, że z oryginalnego obrazka wycinany jest fragment o wysokosci i szerokosci ustalonej (wiec to własciwie nie miniatura, a fragment obrazka). Mam do tego taki skrypt:
  1. <?php
  2. //pobieram zmienną
  3. $obrazek="img/arts/".$_GET['o'];
  4.  
  5. //ustalam wysokosci i szerokosc miniatury
  6. if(!$ms)
  7. $ms=250;
  8. if(!$mw)
  9. $mw=143;
  10.  
  11. //pobieram dane obrazka
  12. $rozmiar=GetImageSize($obrazek);
  13. $szer=$rozmiar[0];
  14. $wys=$rozmiar[1];
  15.  
  16. //miniaturuje ;p
  17.  
  18. if($_FILES['obrazek']['type']='png')
  19. {
  20. $zrd = ImageCreateFromPng($obrazek);
  21. $prz = ImageCreate($ms,$mw);
  22. imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
  23. header('Content-type: image/jpeg');
  24. ImageJpeg($prz, null, 100);
  25. ImageDestroy($zrd);
  26. ImageDestroy($prz);
  27. }
  28. else
  29. {
  30. $zrd = ImageCreateFromJpeg($obrazek);
  31. $prz = ImageCreate($ms,$mw);
  32. imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
  33. header('Content-type: image/jpeg');
  34. ImageJpeg($prz, null, 100);
  35. ImageDestroy($zrd);
  36. ImageDestroy($prz);
  37. }
  38. ?>


Problem w tym, że ongiś skrypt działał, a dziś nie... (nie pamietam, może coś zmieniałem, ale to mało istotne, ważne, że teraz nie działa). Zamiast obrazka .jpg dostaje jedynie tekst alternatywny, a zamiast .png dostaje czarny prostokąt... W czym rzecz? Źle używam jakiejś funkcji? Na gd się kompletnie nie znam, ten skrypt pisałem z dużą pomocą ksiazki/manuala, wiec może coś skaszaniłem, tylko co?

aha - chmody są ustawione dla folderow, w ktorym są obrazki na 777.

Z góry dzięki za odpowiedź (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
wookieb
post
Post #2





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




  1. <?php
  2. $_FILES['obrazek']['type']='png'
  3. ?>

raczej ==

Poza tym sprawdź czy plik PNG napewno ma mimetype PNG

  1. <?php
  2. header('Content-type: image/jpeg');
  3. ImageJpeg($prz, null, 100);
  4. ?>

Sprawdzasz czy jest png ale i tak zwracasz go jako jpg

Poza tym nie masz dolaczonej obsługi przezroczystosci w plikach png.

Jeszcze zamiast imagecopy używaj imagecopyresampled

Ten post edytował wookieb 25.03.2009, 11:07:05
Go to the top of the page
+Quote Post
kazag
post
Post #3





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


@up
wiem, że zwracam jako jpeg, to ma jakieś znaczenie jak go zwrócę?
imagecopyresampled mi go jakoś deformowało...

sprawdzam, czy zadziała.
Go to the top of the page
+Quote Post
Spawnm
post
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




  1. <?php
  2. if($_FILES['obrazek']['type']='png')
  3. ?>
nie zadziała ;]
powinno być 'image/png' czyli
  1. <?php
  2. if($_FILES['obrazek']['type']=='image/png')
  3. ?>
Go to the top of the page
+Quote Post
kazag
post
Post #5





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


więc teraz jpegi robi miniaturki, ale kolory są...zmienione, jakby było ich mniej?

png nie ma, jest tylko tekst alternatywny.

imagecopyresampled robił złe miniatury, mam ustawione tak:
imagecopyresampled($prz, $zrd, 0, 0, 0, 0, $ms, $mw, $szer, $wys);
i robi obrazek jest spłaszczony...

Ten post edytował kazag 25.03.2009, 11:20:36
Go to the top of the page
+Quote Post
Spawnm
post
Post #6





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




zamiast
$prz = ImageCreate($ms,$mw);

daj

$prz = imagecreatetruecolor($ms,$mw);
Go to the top of the page
+Quote Post
wookieb
post
Post #7





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




Cytat(kazag @ 25.03.2009, 11:16:53 ) *
imagecopyresampled robił złe miniatury, mam ustawione tak:
imagecopyresampled($prz, $zrd, 0, 0, 0, 0, $ms, $mw, $szer, $wys);
i robi obrazek jest spłaszczony...


No nic dziwnego skoro nie umiesz wyliczyc odpowiednich wartosci rozmiarów miniaturki
Kod
if(!$ms)
$ms=250;
if(!$mw)
$mw=143;


Ten post edytował wookieb 25.03.2009, 11:30:17
Go to the top of the page
+Quote Post
artur_dziocha
post
Post #8





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


no jeśli uploadujesz obrazki innych rozmiarów niż podane na stało to nic dziwnego. Wysokośc i szerokość przelicz procentowo
Go to the top of the page
+Quote Post
kazag
post
Post #9





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


@up i upUp
Ja rozumiem.
Ale chce mieć wycięty fragment z lewego górnego rogu... nie chce mieć miniatury z obrazu o szerokości np. 1024 px, bo to nie wyglada tak, jak powinno, chce mięc WYCIĘTY fragment.

kod wyglada tak:
Kod
<?php
$obrazek="img/arts/".$_GET['o'];

if(!$ms)
$ms=250;
if(!$mw)
$mw=143;

$rozmiar=GetImageSize($obrazek);
$szer=$rozmiar[0];
$wys=$rozmiar[1];

if($_FILES['obrazek']['type']=='image/png')
{
$zrd = ImageCreateFromPng($obrazek);
$prz = imagecreatetruecolor($ms,$mw);
imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
header('Content-type: image/png');
ImagePng($prz);
ImageDestroy($zrd);
ImageDestroy($prz);
}
else
{
$zrd = ImageCreateFromJpeg($obrazek);
$prz = imagecreatetruecolor($ms,$mw);
imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
header('Content-type: image/jpeg');
ImageJpeg($prz, null, 100);
ImageDestroy($zrd);
ImageDestroy($prz);
}
?>


Jpeg już działa poprawnie, pomógł dla Spawnma. Problem jeszcze tylko z png...
Go to the top of the page
+Quote Post
Spawnm
post
Post #10





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




zamiast imagecopy daj imagecopyresampled
Go to the top of the page
+Quote Post
kazag
post
Post #11





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


nie pomogło, ciagle dostaje jedynie tekst alternatywny, a jak wezme "pokaz obrazek" to wyswietla sie tylko link, mało tego, na belce jest napisane, ze to obrazek JPEG...

wydaje mi się więc, że problem jest z tym ifem.

rozwiązanie było banalne...plik nie był przesyłany, wiec $_FILES nic nie dawało...
wyglada to tak:
Kod
<?php
$obrazek="img/arts/".$_GET['o'];

if(!$ms)
$ms=250;
if(!$mw)
$mw=143;

$rozmiar=GetImageSize($obrazek);
$szer=$rozmiar[0];
$wys=$rozmiar[1];

$typ=basename($obrazek);
$pliki=explode(".", $typ);

if($pliki[1]=='png')
{
$zrd = ImageCreateFromPng($obrazek);
$prz = imagecreatetruecolor($ms,$mw);
imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
header('Content-type: image/png');
imagepng($prz);
ImageDestroy($zrd);
ImageDestroy($prz);
}
else
{
$zrd = ImageCreateFromJpeg($obrazek);
$prz = imagecreatetruecolor($ms,$mw);
imagecopy($prz, $zrd, 0, 0, 0, 0, $ms, $mw);
header('Content-type: image/jpeg');
ImageJpeg($prz, null, 100);
ImageDestroy($zrd);
ImageDestroy($prz);
}
?>


ogromne dzięki za pomoc wszystkim (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował kazag 25.03.2009, 11:50:45
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 04:25