Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zmniejszanie zdjęć PNG za pomocą php, czarne tło zamiast przezroczystosci
Forum PHP.pl > Forum > Przedszkole
lamcpp
Ściągnęłem moduł koszyka internetowego, w którym pokazują się obok ceny zdjęcia i są one zmniejszone.
Niestety mając oryginalne zdjęcie w formacie PNG, przy zmniejszaniu zdjęcie traci przezroczystość i powstaje czarne tło:( idealnym rozwiązniem byłaby albo ta przezroczystośc albo, żeby chociaż to tło było białem.
Mógłby ktoś spjrzeć na ten kod, co jest nie tak? czytałem o tych wszystkich funkcjach odnośnie zmniejszania obrazów typu. imagecreatetruecolor etc. ale nie mogę dojść do teego co moze być nie tak. Poniżej dwa pliki:
1. images.php:
  1. <?php
  2.  
  3. /**
  4.  * @version $Id: $
  5.  * @author Codextension
  6.  * @package Joomla!
  7.  * @subpackage Module
  8.  * @copyright Copyright (C) 2008 - 2012 by Codextension. All rights reserved.
  9.  * @license GNU/GPL, see LICENSE
  10.  */
  11.  
  12. // no direct access
  13. defined( '_JEXEC' ) or die( 'Restricted access' );
  14. if(class_exists('JLImageHelper') != true){
  15. class JLImageHelper extends JObject {
  16. static function getImageCreateFunction($type) {
  17. switch ($type) {
  18. case 'jpeg':
  19. case 'jpg':
  20. $imageCreateFunc = 'imagecreatefromjpeg';
  21. break;
  22.  
  23. case 'png':
  24. $imageCreateFunc = 'imagecreatefrompng';
  25. break;
  26.  
  27. case 'bmp':
  28. $imageCreateFunc = 'imagecreatefrombmp';
  29. break;
  30.  
  31. case 'gif':
  32. $imageCreateFunc = 'imagecreatefromgif';
  33. break;
  34.  
  35. case 'vnd.wap.wbmp':
  36. $imageCreateFunc = 'imagecreatefromwbmp';
  37. break;
  38.  
  39. case 'xbm':
  40. $imageCreateFunc = 'imagecreatefromxbm';
  41. break;
  42.  
  43. default:
  44. $imageCreateFunc = 'imagecreatefromjpeg';
  45. }
  46.  
  47. return $imageCreateFunc;
  48. }
  49.  
  50. static function getImageSaveFunction($type) {
  51. switch ($type) {
  52. case 'jpeg':
  53. $imageSaveFunc = 'imagejpeg';
  54. break;
  55.  
  56. case 'png':
  57. $imageSaveFunc = 'imagepng';
  58. break;
  59.  
  60. case 'bmp':
  61. $imageSaveFunc = 'imagebmp';
  62. break;
  63.  
  64. case 'gif':
  65. $imageSaveFunc = 'imagegif';
  66. break;
  67.  
  68. case 'vnd.wap.wbmp':
  69. $imageSaveFunc = 'imagewbmp';
  70. break;
  71.  
  72. case 'xbm':
  73. $imageSaveFunc = 'imagexbm';
  74. break;
  75.  
  76. default:
  77. $imageSaveFunc = 'imagejpeg';
  78. }
  79.  
  80. return $imageSaveFunc;
  81. }
  82.  
  83. static function resize($imgSrc, $imgDest, $dWidth, $dHeight, $crop = true) {
  84. $info = getimagesize($imgSrc, $imageinfo);
  85. $sWidth = $info[0];
  86. $sHeight = $info[1];
  87.  
  88. if ($sHeight / $sWidth > $dHeight / $dWidth) {
  89. $width = $sWidth;
  90. $height = round(($dHeight * $sWidth) / $dWidth);
  91. $sx = 0;
  92. $sy = round(($sHeight - $height) / 3);
  93. }
  94. else {
  95. $height = $sHeight;
  96. $width = round(($sHeight * $dWidth) / $dHeight);
  97. $sx = round(($sWidth - $width) / 2);
  98. $sy = 0;
  99. }
  100.  
  101. if (!$crop) {
  102. $sx = 0;
  103. $sy = 0;
  104. $width = $sWidth;
  105. $height = $sHeight;
  106. }
  107.  
  108. //echo "$sx:$sy:$width:$height";die();
  109.  
  110. $imageCreateFunc = self::getImageCreateFunction(str_replace('image/', '', $info['mime']));
  111. $imageSaveFunc = self::getImageSaveFunction(JFile::getExt($imgDest));
  112.  
  113. $sImage = $imageCreateFunc($imgSrc);
  114. $dImage = imagecreatetruecolor($dWidth, $dHeight);
  115. imagecopyresampled($dImage, $sImage, 0, 0, $sx, $sy, $dWidth, $dHeight, $width, $height);
  116.  
  117. if( $imageSaveFunc=='imagepng' ){
  118. $scaleQuality = round((100/100) * 9);
  119. $invertScaleQuality = 9 - $scaleQuality;
  120. $imageSaveFunc($dImage, $imgDest, $invertScaleQuality);
  121. }else{
  122. $imageSaveFunc($dImage, $imgDest, 100);
  123. }
  124. }
  125. static function createImage($imgSrc, $imgDest, $width, $height, $crop = true) {
  126. if (JFile::exists($imgDest)) {
  127. $info = getimagesize($imgDest, $imageinfo);
  128.  
  129. // Image is created
  130. if (($info[0] == $width) && ($info[1] == $height)) {
  131. return;
  132. }
  133. }
  134. if (JFile::exists($imgSrc)) {
  135. self::resize($imgSrc, $imgDest, $width, $height, $crop);
  136. }
  137. }
  138. }
  139. }
  140. ?>


drugiego pliku nie mogę wysłac bo jest za duży umieściłem go pod tym linkiem: http://wklej.se/5a6d
lamcpp
Zastosowałem do swojego przykładu i niestety nie działa
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.