Generator miniaturek nie generuje poprawnie PNG

Odpowiedz Nowy wątek
2015-03-08 22:41
Pijany Mleczarz
0

Witam serdecznie,
Mam taki skrypt do generowania miniaturek plików graficznych:


function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
    if ($file != "") {
        if ($filetemp != "") {
            if (is_uploaded_file($filetemp)) {
                move_uploaded_file($filetemp, $path . "/" . $newname);

                //////////////////////////////////
                if (preg_match("/php/", $file) || preg_match("/Php/", $file)  || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $sizette = getimagesize($path . "/" . $newname);
                if($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png" && $sizette['mime'] != "image/png"){
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $rozm = filesize($path . "/" . $newname);
                if($rozm > 2500000){
                    unlink($path . "/" . $newname);
                    return "PLIK ZA DUŻY- PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                //////////////////////////////////

                $file = strtolower($file);
                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = $wymiar;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }
                /////////////////

                if($nazwaobrazka['1'] == "png"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_path, 85);
                }

                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = 800;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }

                if($nazwaobrazka['1'] == "png"){

                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_path, 85);

                }

                /////////////////

                return $img_path;
            } else {
                echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
            }
        }
    }
}

Ale nie generuje mi miniaturki.... Wie ktoś może dlaczego?
Pliki jpg generuje poprawnie - problem jest tylko z PNG.

Bardzo proszę o pomoc,
Northwest

Pozostało 580 znaków

2015-03-08 23:11
1

Może quality trzeba zmienić?

http://php.net/imagepng

Dla PNG są inne wartości niż dla JPG. I nawet nie dotyczą jakości, lecz stopnia kompresji :)

edytowany 1x, ostatnio: Spine, 2015-03-08 23:11

Pozostało 580 znaków

2015-03-09 01:02
Pijany Mleczarz
0

Faktycznie, dziękuję :)
Zmieniłem na taki kod:


function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
    if ($file != "") {
        if ($filetemp != "") {
            if (is_uploaded_file($filetemp)) {
                move_uploaded_file($filetemp, $path . "/" . $newname);

                //////////////////////////////////
                if (preg_match("/php/", $file) || preg_match("/Php/", $file)  || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $sizette = getimagesize($path . "/" . $newname);
                if($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png" && $sizette['mime'] != "image/png"){
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $rozm = filesize($path . "/" . $newname);
                if($rozm > 2500000){
                    unlink($path . "/" . $newname);
                    return "PLIK ZA DUŻY- PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                //////////////////////////////////

                $file = strtolower($file);
                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = $wymiar;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }
                /////////////////

                if($nazwaobrazka['1'] == "png"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_path, 85);
                }

                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = 800;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }

                if($nazwaobrazka['1'] == "png"){

                $thumb = imagecreatetruecolor(100,100); 
                imagesavealpha($img, true); 
                $color = imagecolorallocatealpha($img,0x00,0x00,0x00,127); 
                imagefill($thumb, 0, 0, $color); 

                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_pat, 9);

                }

                /////////////////

                return $img_path;
            } else {
                echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
            }
        }
    }
}

Efektem użycia tej funkcji jest wyświetlenie:
�PNG IHDRdd���IDATx���KkQ��g.�m�{5�Z+A����M�k�&���E�馋./��8����~�9DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD�EFp���֓}�{ ��$e=�F������=a�[և�w��ԙ���u_A�}�޼�Q�����g0�����g���9<�KY�eYU]����k���=�_q֎o����q5h1��~g%����|�@]����r�F٩�*�||��xM���m�b��6ò����S8h�魇Pܙ�r}�rygW)��-�(��t������W�FC\��ҝ���U���Q�vٮO�b E����'0���>��K�Y�M�,��hS�_VQ���=�v�8��������).��_UYC�s�yM��)��;w�LVw���P�^�Y��W�{�m})�~ h�Ks�IEND�B`�

Plik "duży" wgrywa poprawnie, jednak miniaturka jest pusta (zajmuje 0b) w przypadku PNG:(

Pozostało 580 znaków

2015-03-09 01:32
0

Nie zagłębiałem się w działanie, ale nie zamieniłeś wszystkich wywołań imagepng ;) Na górze wciąż jest 85.

edytowany 1x, ostatnio: Spine, 2015-03-09 01:32

Pozostało 580 znaków

2015-03-09 11:05
Pijany Mleczarz
0
 function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
    if ($file != "") {
        if ($filetemp != "") {
            if (is_uploaded_file($filetemp)) {
                move_uploaded_file($filetemp, $path . "/" . $newname);

                //////////////////////////////////
                if (preg_match("/php/", $file) || preg_match("/Php/", $file)  || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $sizette = getimagesize($path . "/" . $newname);
                if($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png" && $sizette['mime'] != "image/png"){
                    unlink($path . "/" . $newname);
                    return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                $rozm = filesize($path . "/" . $newname);
                if($rozm > 2500000){
                    unlink($path . "/" . $newname);
                    return "PLIK ZA DUŻY- PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
                    exit();
                }
                //////////////////////////////////

                $file = strtolower($file);
                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = $wymiar;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }
                /////////////////

                if($nazwaobrazka['1'] == "png"){

                imagesavealpha($thumb, true); 
                $color = imagecolorallocatealpha($thumb,0x00,0x00,0x00,127); 
                imagefill($thumb, 0, 0, $color); 

                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_path, 9);
                }

                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = 800;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość 
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagejpeg($thumb, $thumb_path, 85);
                }

                if($nazwaobrazka['1'] == "png"){

                imagesavealpha($thumb, true); 
                $color = imagecolorallocatealpha($thumb,0x00,0x00,0x00,127); 
                imagefill($thumb, 0, 0, $color); 

                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 85)
                imagepng($thumb, $thumb_path, 9);

                }

                /////////////////
 echo $img_path;
                return $img_path;
            } else {
                echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
            }
        }
    }
}

Mam coś takiego i zamiast przeźroczystych/normalnych PNG generuje mi całe czarne obrazki :(

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0