문제

나는 PHP에서 minecraft의 수업을 개발했으며, 가장 최근의 기능 중 하나는 피부 미리보기이지만 전신 미리보기 (머리 미리보기가 잘 작동 함)에 대한 코드를 약간의 문제가 발생합니다.코드 미리보기를 위해 사용중인 코드는 다음과 같습니다 ...

header('Content-Type: image/png');
$canvas = imagecreatetruecolor($size, $size);
$image = imagecreatefrompng($this->custom_skin($username));
imagecopyresampled($canvas, $image, 0, 0, 8, 8, $size, $size, 8, 8);
return imagepng($canvas);
.

https://github.com/nblackburn/minecraft/blob/master / class.minecraft.php

모든 기부금은이 전신 미리보기를 얻는 데 큰 도움이 될 것입니다.

도움이 되었습니까?

해결책

이 피부 템플릿을 살펴보십시오 http://www.minecraftwiki.net/ images/5/54/skintemplate.png

영역이 있어야합니다 :

head        x8 y8 w8 h8 
body front  x20 y20 w8 h12
arm front   x44 y20 w4 h12
leg front   x4 y20 w4 h12
.

왼쪽 및 오른쪽을 미러링하려면 팔과 다리 섹션을 뒤집어야 할 수도 있습니다.

header('Content-Type: image/png');

$scale = $size / 16;
$canvas = imagecreatetruecolor(16*$scale, 32*$scale);
$image = imagecreatefrompng($this->custom_skin($username));

imagealphablending($canvas, false);
imagesavealpha($canvas,true);
$transparent = imagecolorallocatealpha($canvas, 255, 255, 255, 127);
imagefilledrectangle($canvas, 0, 0, 16*$scale, 32*$scale, $transparent);

imagecopyresized($canvas, $image, 4*$scale,  0*$scale,  8,   8,   8*$scale,  8*$scale,  8,  8);  //head
imagecopyresized($canvas, $image, 4*$scale,  8*$scale,  20,  20,  8*$scale,  12*$scale, 8,  12); //body
imagecopyresized($canvas, $image, 0*$scale,  8*$scale,  44,  20,  4*$scale,  12*$scale, 4,  12); //arm left
imagecopyresampled($canvas, $image, 12*$scale, 8*$scale,  47,  20,  4*$scale,  12*$scale, -4,  12); //arm right (flipped)
imagecopyresized($canvas, $image, 4*$scale,  20*$scale, 4,   20,  4*$scale,  12*$scale, 4,  12); //leg left
imagecopyresampled($canvas, $image, 8*$scale,  20*$scale, 7,   20,  4*$scale,  12*$scale, -4,  12); //leg right (flipped)

return imagepng($canvas);
.

위의 내용은 메모리에서 바로 있지만 올바른 방향으로 가리켜 야합니다.이 경우 보간을 피하기를 원하는이 경우에 imagecopyresampled를 사용하면 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top