- Баллы
- 103
- Имя в Minecraft
- Gate
Всем привет, делаю для сайта что-то вроде галереи скинов, чтобы можно было одним кликом установить понравившийся скин. Для "собирания" скина и его нормального отображения использую данный php код:
Но вот незадача - обычные скины отображаются нормально, а HD некорректно. Прошу помощи более верным кодом, если таковой существует
function imageflip(&$result, &$img, $rx = 0, $ry = 0, $x = 0, $y = 0, $size_x = null, $size_y = null) {
if ($size_x < 1) $size_x = imagesx($img);
if ($size_y < 1) $size_y = imagesy($img);
imagecopyresampled($result, $img, $rx, $ry, ($x + $size_x-1), $y, $size_x, $size_y, 0-$size_x, $size_y);
}
header ("Content-type: image/png");
$way_skin = 'http://site.ru/'.$_GET['file'].'';
$skin = imagecreatefrompng($way_skin);
$preview = imagecreatetruecolor(16, 32);
$transparent = imagecolorallocatealpha($preview, 255, 255, 255, 127);
imagefill($preview, 0, 0, $transparent);
//Вид скина спереди
imagecopy($preview, $skin, 4, 0, 8, 8, 8, 8); //Башка
imagecopy($preview, $skin, 0, 8, 44, 20, 4, 12); //Одна рука
imageflip($preview, $skin, 12, 8, 44, 20, 4, 12); //Другая рука
imagecopy($preview, $skin, 4, 8, 20, 20, 8, 12); //Тело
imagecopy($preview, $skin, 4, 20, 4, 20, 4, 12); //Одна нога
imageflip($preview, $skin, 8, 20, 4, 20, 4, 12); //Другая нога
imagecopy($preview, $skin, 4, 0, 40, 8, 8, 8); //Шляпа
$fullsize = imagecreatetruecolor(100, 200);
imagesavealpha($fullsize, true);
$transparent = imagecolorallocatealpha($fullsize, 255, 255, 255, 127);
imagefill($fullsize, 0, 0, $transparent);
imagecopyresized($fullsize, $preview, 0, 0, 0, 0, imagesx($fullsize), imagesy($fullsize), imagesx($preview), imagesy($preview));
imagepng($fullsize);
imagedestroy($fullsize);
imagedestroy($preview);
imagedestroy($skin);
if ($size_x < 1) $size_x = imagesx($img);
if ($size_y < 1) $size_y = imagesy($img);
imagecopyresampled($result, $img, $rx, $ry, ($x + $size_x-1), $y, $size_x, $size_y, 0-$size_x, $size_y);
}
header ("Content-type: image/png");
$way_skin = 'http://site.ru/'.$_GET['file'].'';
$skin = imagecreatefrompng($way_skin);
$preview = imagecreatetruecolor(16, 32);
$transparent = imagecolorallocatealpha($preview, 255, 255, 255, 127);
imagefill($preview, 0, 0, $transparent);
//Вид скина спереди
imagecopy($preview, $skin, 4, 0, 8, 8, 8, 8); //Башка
imagecopy($preview, $skin, 0, 8, 44, 20, 4, 12); //Одна рука
imageflip($preview, $skin, 12, 8, 44, 20, 4, 12); //Другая рука
imagecopy($preview, $skin, 4, 8, 20, 20, 8, 12); //Тело
imagecopy($preview, $skin, 4, 20, 4, 20, 4, 12); //Одна нога
imageflip($preview, $skin, 8, 20, 4, 20, 4, 12); //Другая нога
imagecopy($preview, $skin, 4, 0, 40, 8, 8, 8); //Шляпа
$fullsize = imagecreatetruecolor(100, 200);
imagesavealpha($fullsize, true);
$transparent = imagecolorallocatealpha($fullsize, 255, 255, 255, 127);
imagefill($fullsize, 0, 0, $transparent);
imagecopyresized($fullsize, $preview, 0, 0, 0, 0, imagesx($fullsize), imagesy($fullsize), imagesx($preview), imagesy($preview));
imagepng($fullsize);
imagedestroy($fullsize);
imagedestroy($preview);
imagedestroy($skin);
Но вот незадача - обычные скины отображаются нормально, а HD некорректно. Прошу помощи более верным кодом, если таковой существует


