Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne] Krawędzie PNG
Forum PHP.pl > Forum > Przedszkole
aras785
Witam. Nie wiem dlaczego ale Tworząc znak wodny za pomocą php, plik PNG znaku wodnego posiada brzydkie krawędzie. Mimo, że jest bardzo wysokiej rozdzielczości...

Oto wynik: http://i.imgur.com/ctwlpKg.png

zapis png w programie ps.

Klasa php: http://www.mywebmymail.com/?q=content/easyphpthumbnail-class

Ktoś wie o co chodzi?
flashdev
A pokaż kod, jakim to robisz? Może wystarczy zmienić konfigurację.
aras785
Cześć. W czystym gd działa dobrze... Postanowiłem sam napisać prostą klasę która będzie szybsza niż w/w klasa. Pozdrawiam smile.gif

Takie coś wystukałem:

  1. <?php
  2. class ImageClass {
  3. private $ext;
  4. //rozszerzenie obrazka
  5. private $name;
  6. //nazwa do zapisania
  7. private $image;
  8. //zmienna z obrazkiem
  9. private $imageWidth;
  10. private $imageHeight;
  11.  
  12. public function __construct($filename, $name, $ext) {
  13. $this -> name = $name;
  14. $this -> ext = $ext;
  15. switch($this->ext) {
  16. case ('jpg' OR 'jpeg') :
  17. $this -> image = imagecreatefromjpeg($filename);
  18. break;
  19. case 'png' :
  20. $this -> image = imagecreatefromjpeg($filename);
  21. break;
  22. case 'gif' :
  23. $this -> image = imagecreatefromgif($filename);
  24. break;
  25. }
  26. $this -> imageWidth = imagesx($this -> image);
  27. $this -> imageHeight = imagesy($this -> image);
  28. }
  29.  
  30. public function original($dir) {
  31. $this -> save($dir, $this->image);
  32. }
  33.  
  34. public function full($dir, $watermark) {
  35. $img_full = imagecreatetruecolor($this->imageWidth, $this->imageHeight);
  36. $watermark = imagecreatefrompng($watermark);
  37. $watermarkWidth = imagesx($watermark);
  38. $watermarkHeight = imagesy($watermark);
  39. imagecopy($this->image, $watermark, ($this -> imageWidth / 2) - ($watermarkWidth / 2), ($this -> imageHeight / 2) - ($watermarkHeight / 2), 0, 0, $watermarkWidth, $watermarkHeight);
  40. $this -> save($dir, $this->image);
  41. }
  42.  
  43. public function mini($dir, $width, $height) {
  44. if($this->imageWidth>$this->imageHeight) $height = $this->imageHeight/($this->imageWidth/$width); else $width = $this->imageWidth/($this->imageHeight/$height);
  45. $img_mini = imagecreatetruecolor($width, $height);
  46. imagecopyresampled($img_mini, $this -> image, 0, 0, 0, 0, $width, $height, $this -> imageWidth, $this -> imageHeight);
  47. $this -> save($dir,$img_mini);
  48. imagedestroy($img_mini);
  49. }
  50.  
  51. private function save($dir, $image) {
  52. if (empty($image))
  53. $image = $this -> image;
  54. switch($this->ext) {
  55. case ('jpg' OR 'jpeg') :
  56. imagejpeg($image, $dir . $this -> name.'.'.$this->ext, 80);
  57. break;
  58. case 'png' :
  59. imagepng($image, $dir . $this -> name.'.'.$this->ext, 80);
  60. break;
  61. case 'gif' :
  62. imagegif($image, $dir . $this -> name.'.'.$this->ext, 80);
  63. break;
  64. }
  65.  
  66. }
  67. public function __destruct() {
  68. imagedestroy($this->image);
  69. }
  70.  
  71. }
  72.  
  73. $image = new ImageClass($filename, 'nowa_fotka', 'jpg');
  74. $image -> original('./original/');
  75. $image -> mini('./mini/', 200, 100);
  76. $image -> full('./full/', './Data/other/watermark.png');


Dodam, że pisałem to pod swoje wymagania.
fiszol
imagecopyresampled czasem zachowuje się dziwnie kopiując png z przezroczytością, nie pamiętam już powodów ale jest o tym sporo w internetach. Jeśli to jest przyczyną, użyj imagecopy zamiast imagecopyresampled.

//doh lol nvm
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.