Guest User

Untitled

a guest
May 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. <?
  2. // Recadrage éventuel en cas de dimension inf. à 80px
  3. if((!is_null($resResized) && (($iNewWidth < 80) || ($iNewHeight < 80)))
  4. || (($aImgDetails[0] < 80) || ($aImgDetails[1] < 80))) {
  5. // Création de la source et de la ressource destination
  6. if(isset($resResized)) $resImg = $resResized;
  7. else {
  8. switch($aImgDetails[2]) {
  9. case IMAGETYPE_GIF : $resImg = @imagecreatefromgif($_FILES['imagefile']['tmp_name']);
  10. break;
  11. case IMAGETYPE_JPEG : $resImg = @imagecreatefromjpeg($_FILES['imagefile']['tmp_name']);
  12. break;
  13. case IMAGETYPE_PNG : $resImg = @imagecreatefrompng($_FILES['imagefile']['tmp_name']);
  14. break;
  15. }
  16. $iNewWidth = $aImgDetails[0];
  17. $iNewHeight = $aImgDetails[1];
  18. }
  19. if(!$resReframed = @imagecreatetruecolor(80, 80)) my_exit('Erreur GD2 : imagecreatetruecolor()');
  20.  
  21. // On tente de deviner la transparence d'origine, si elle existe
  22. $isAlpha = FALSE;
  23. switch($aImgDetails[2]) {
  24. case IMAGETYPE_GIF : $iTransparent = imagecolortransparent($resImg);
  25. break;
  26. case IMAGETYPE_JPEG : $iTransparent = FALSE;
  27. break;
  28. case IMAGETYPE_PNG :
  29. $isAlpha = ord(file_get_contents($_FILES['imagefile']['tmp_name'], FALSE, NULL, 25, 1)) & 4;
  30. if(!$isAlpha) { // Pas d'alpha, on tente de chopper la couleur de transparence
  31. $iTransparent = imagecolortransparent($resImg);
  32. }
  33. break;
  34. }
  35.  
  36. // On prépare une nouvelle couleur de transparence, ou une couleur avec support alpha
  37. if($aImgDetails[2] == IMAGETYPE_JPEG) {
  38. $iTransparent = imagecolorallocate($resReframed, 255, 255, 255);
  39. } elseif($isAlpha) {
  40. if(!imagealphablending($resReframed, FALSE)) my_exit('Erreur GD2: alpha inactivable sur resReframed');
  41. $iTransparent = imagecolorallocatealpha($resReframed, 255, 0, 255, 127);
  42. } elseif(is_null($iTransparent) || !$iTransparent || ($iTransparent == -1)) {
  43. $iTransparent = imagecolorallocate($resReframed, 255, 0, 255);
  44. }
  45.  
  46. // On remplit l'image recadrée de la nouvelle couleur transparente
  47. imagefilledrectangle($resReframed, 0, 0, 80, 80, $iTransparent);
  48.  
  49. // On calcule les coordonnées du recadrage lui-même
  50. $iFrameX = Floor((80-$iNewWidth) / 2);
  51. if($iFrameX < 0) $iFrameX = 0;
  52. $iFrameY = Floor((80-$iNewHeight) / 2);
  53. if($iFrameY < 0) $iFrameY = 0;
  54.  
  55. // On merge les deux images
  56. if($isAlpha) {
  57. // Copie de chaque pixel et allocation de sa valeur alpha (0 = opaque, 127 = 100% transparent)
  58. for($i = 0; $i < $iNewWidth; $i++) {
  59. for($j = 0; $j < $iNewHeight; $j++) {
  60. $aPXAlpha = imagecolorsforindex($resImg, imagecolorat($resImg, $i, $j));
  61. if($aPXAlpha['alpha'] <= 126) $aPXColor = imagecolorsforindex($resImg, imagecolorat($resImg, $i, $j));
  62. else $aPXColor = imagecolorsforindex($resReframed, $iTransparent);
  63. $iColor = imagecolorallocatealpha($resReframed, $aPXColor['red'], $aPXColor['green'], $aPXColor['blue'], $aPXAlpha['alpha']);
  64. imagesetpixel($resReframed, $i, $j, $iColor);
  65. }
  66. }
  67. imagesavealpha($resReframed, TRUE);
  68. } else { // l'image cadre n'a pas de couche alpha
  69. imagecolortransparent($resReframed, $iTransparent);
  70. if(!@imagecopymerge($resReframed, $resImg, $iFrameX, $iFrameY, 0, 0, $iNewWidth, $iNewHeight, 100)) my_exit('Erreur GD2: impossible de recadrer la ressource ResImg');
  71. }
  72. }
  73. ?>
Add Comment
Please, Sign In to add comment