Resize .PNG maakt bestandsgrootte 0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

D B

D B

17/08/2014 21:33:18
Quote Anchor link
Hallo,

Ik heb een script waarmee ik afbeeldingen upload. Dit script verkleint dan de afbeelding en zet ze in een map nieuws. Als ik dit met een .jpg file doe gaat dit perfect. Doe ik dit echter met een .png file krijg ik een bestand in de map nieuws met een bestandsgrootte van 0 bytes. Ergens bij het verkleinen gaat het fout.

Kan iemand hier eens naar kijken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
$temp
= explode(".", $_FILES["foto"]["name"]);
$extension = end($temp);

$file = time(). '.'. $extension;
move_uploaded_file($_FILES["foto"]["tmp_name"],$_SERVER['DOCUMENT_ROOT']. "/nieuws/". $file);
$fotopad = "http://". $_SERVER['SERVER_NAME']. "/nieuws/". $file;
//tot hier gaat het goed.........
resizeImage("../nieuws/". $file,"../nieuws/",200,150);
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?
function resizeImage($sSrcPath, $sDestPath, $iDestWidth, $iDestHeight, $iDestQuality = 80) {
  $aSrcMime = getimagesize($sSrcPath);
  $aSrcName = array_pop(split("[/]", $sSrcPath));
  $aSrcExtention = strtolower(array_pop(split("[.]", $sSrcPath)));
  $sDestPath = $sDestPath. $aSrcName;

  switch ($aSrcMime["mime"]) {
    case
"image/gif":
      if ($aSrcExtention == "gif") {
        $sSrcData = imagecreatefromgif($sSrcPath);
      }

      else {
        return false;
      }

    break;
    case
"image/png":
      if ($aSrcExtention == "png") {
        $sSrcData = imagecreatefrompng($sSrcPath);
      }

      else {
        return false;
      }

    break;
    case
"image/jpeg":
      if ( ($aSrcExtention == "jpg") || ($aSrcExtention == "jpeg") ) {
        $sSrcData = imagecreatefromjpeg($sSrcPath);
      }

      else {
        return false;
      }

    break;
    default:

      return false;
    break;
  }

 
  if ($sSrcData) {
    $iSrcWidth = imagesx($sSrcData);
    $iSrcHeight = imagesy($sSrcData);
    $fSrcRatio = $iSrcWidth/$iSrcHeight;
    $fDestRatio = $iDestWidth/$iDestHeight;

    if ($fDestRatio > $fSrcRatio){
      $iDestHeight = $iDestHeight;
      $iDestWidth = $iDestHeight*$fSrcRatio;
    }

    else {
      $iDestWidth = $iDestWidth;
      $iDestHeight = $iDestWidth/$fSrcRatio;
    }


    $sDestData = imagecreatetruecolor($iDestWidth, $iDestHeight);

    if (imagecopyresampled($sDestData, $sSrcData, 0, 0, 0, 0, $iDestWidth, $iDestHeight, $iSrcWidth, $iSrcHeight)) {

      switch ($aSrcMime["mime"]) {
        case
"image/gif":
          if ($aSrcExtention == "gif") {

            if(imagegif($sDestData, $sDestPath, $iDestQuality)) {
              imagedestroy($sSrcData);
              return true;
            }

            else {
              return false;
            }

          }

          else {
            return false;
          }

        break;
        case
"image/png":
          if ($aSrcExtention == "png") {

            if(imagepng($sDestData, $sDestPath, $iDestQuality)) {
              imagedestroy($sSrcData);
              return true;
            }

            else {
              return false;
            }

          }

          else {
            return false;
          }

        break;
        case
"image/jpeg":
          if ( ($aSrcExtention == "jpg") || ($aSrcExtention == "jpeg") ) {

            if(imagejpeg($sDestData, $sDestPath, $iDestQuality)) {
              imagedestroy($sSrcData);
              return true;
            }

            else {
              return false;
            }

          }

          else {
            return false;
          }

        break;
        default:

          return false;
        break;
      }

    }

    else {
      return false;
    }

  }

  else {
    return false;
  }

}

?>
Gewijzigd op 17/08/2014 21:34:00 door D B
 
PHP hulp

PHP hulp

26/12/2024 13:11:19
 
Obelix Idefix

Obelix Idefix

17/08/2014 21:46:58
Quote Anchor link
Op regel 39 - 42 haal je waarden op / voer je berekeningen uit.
Eerste wat ik zou controleren, is of de inhoud van die variabelen kloppen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$iDestHeight = $iDestHeight;

Wat is hier de bedoeling van?
 
D B

D B

17/08/2014 21:55:17
Quote Anchor link
Wat ik vergeet te melden is dat dit uit een bestaand scriptje komt (heb dit niet zelf gemaakt). Maar het vreemde is dus dat het wel bij een .jpg perfect werkt maar niet bij een .png
 
Obelix Idefix

Obelix Idefix

17/08/2014 21:57:06
Quote Anchor link
Daarmee geef je geen antwoord op mijn vragen.
 
D B

D B

17/08/2014 22:12:17
Quote Anchor link
Dat doet volgens mij niets :)

Net als 4 regels lager $iDestWidth = $iDestWidth;
Zouden er volgens mij beide uit kunnen.

De inhoud van de variabele zijn bij de .jpg file en bij de .png file precies gelijk, dus ik denk dat deze ook kloppen. (ik upload dezelfde file met beide extensies)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/08/2014 08:31:12
Quote Anchor link
iDestQuality = 80
Bij png moet dat een waarde tussen 0 en 9 zijn.
 
D B

D B

18/08/2014 09:19:50
Quote Anchor link
Hallo Ger,

Bedankt voor je reactie!
Dit werkt inderdaad.

Wat ik nu wel zie is dat een transparante achtergrond omgezet word naar een zwarte achtergrond.
Is dit nog ergens aan te passen?

Groeten!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/08/2014 10:02:59
Quote Anchor link
Yepz:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
        case "image/png":
          if ($aSrcExtention == "png") {
        $trans = imagecolorallocate($sDestData, 0,0,0);
        imagecolortransparent($sDestData, $trans);
            if(imagepng($sDestData, $sDestPath, $iDestQuality)) {
              imagedestroy($sSrcData);
              return true;
            }

            else {
              return false;
            }

          }

          else {
            return false;
          }

        break;
 
Bart V B

Bart V B

18/08/2014 10:04:45
Quote Anchor link
Als je de manual erbij had genomen dan had je gezien dat daar 2 extra regels voor nodig zijn:
http://php.net/manual/en/function.imagecreatefrompng.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
imageAlphaBlending($imgPng, true);
imageSaveAlpha($imgPng, true);
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.