Mam zrobiony skrypt, który zmniejsza rozmiar obrazku jeżeli jego szerokość jest większa niż X.
Następnie tworzony jest nowy obrazek z białym tłem o takich samych wymiarach jak pomniejszony, tymże wysokość jego jest o 37px większa.
Na stworzone tło wstawiany jest zmniejszony obrazek, na samej górze, a w prawym dolnym rogu obrazek tzw. watermark o wysokości 35px.
Problem jest w tym, iż od momentu stworzenia tła (pustego obrazka, na który wszystko jest wklejane) to cały obrazek albo zmienia barwy, albo jest złej jakości lub czarno-biały. Nie wiem dlaczego tak się dzieje. Poniżej przedstawiam dwa obrazki do porównania:
Obrazek oryginalny: http://img209.imageshack.us/img209/8352/heheo.jpg
Obrazek przepuszczony przez skrypt: http://img39.imageshack.us/img39/5918/change.jpg
Kawałek kodu, który odpowiada za stworzenie nowego obrazka i połączenie ich wszystkich:
$MAX_NEW_WIDTH = 676; $MAX_NEW_HEIGHT = 10000; if($fileName_type2[0] > $MAX_NEW_WIDTH){ list($width, $height) = $fileName_type2; }else{ $new_width = $fileName_type2[0]; $new_height = $fileName_type2[1]; $width = $fileName_type2[0]; $height = $fileName_type2[1]; } if($fileName_type2['mime'] == 'image/png'){ $source = imagecreatefrompng($fileTmp); }else{ $source = imagecreatefromjpeg($fileTmp); } $dest = imagecreatetruecolor($new_width, $new_height); imagecopyresized($dest, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height); $image1 = imagecreatefrompng('media/mark.png'); $plik_w = imagesx($dest); if($plik_w < 249){ $plik_w_change = 249-$plik_w; $plik_w = $plik_w+$plik_w_change; } $plik_h = imagesy($dest)+37; // START - Stworzenie obrazka, jeżeli pominę ten krok, kolory pozostają bez zmiany, prawidłowe są $obrazek111 = imagecreate($plik_w, $plik_h); imagecolorallocate($obrazek111, 255, 255, 255); imagecopy($obrazek111, $dest, 0, 0, 0, 0, imagesx($dest), imagesy($dest)); // KONIEC $znaczek_w = imagesx($image1); $znaczek_h = imagesy($image1); $od_x = $plik_w-$znaczek_w; $od_y = $plik_h-$znaczek_h; imagecopy($obrazek111, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h); if($fileName_type2['mime'] == 'image/png'){ imagepng($obrazek111,'media/'.$file_change); }else{ imagejpeg($obrazek111,'media/'.$file_change); } imagedestroy($image1); imagedestroy($obrazek111);
Z góry dziękuję za pomoc.