PHP 7에서 기본 사용자 초기 화신 만들기🤘😎

🤔 '묵인'화신은 무엇입니까?


사용자가 올린 자료, 예를 들어 프로필 사진과 관련될 때 일부 사용자는 업로드를 피할 수 있다. 이런 상황에서 합리적인 반환을 제공하는 것은 적당한 일이다. 일반적으로 보면 간단하고 배경이 간단하며 일부 인물은 한 사람의 윤곽, 응용 프로그램 로고나 계란과 같다.어떤 사람들은 사용자 이니셜이 있는 사용자 정의 반환을 제공하여 사용자 간에 반환을 다르게 할 수 있다.
이것이 바로 우리가 지금 해야 할 일이다.🤯

📃 요구 사항


이를 위해서는 PHP 7+을 실행하고 FreeType을 지원해야 합니다.
--with-freetype-dir=DIR
로컬 테스트에 사용할 .ttf 파일이 필요합니다. 시스템 글꼴 저장소에서 파일을 복사할 수 있습니다. 파일이 어디에 있든지 간에.생산에 사용하려면 합법적인 상업용 사본을 얻으십시오.
코드를 작성하기 시작합시다.✍️

🔨 우리 기금회


우리가 이렇게 좋은 것을 얻기 전에, 우리는 우선 내무 처리를 해야 한다. 우리는 그것을 한쪽에 놓고, 우리의 새로운 함수를 만들어야 한다. 나는 그것을 createDefaultAvatar()이라고 명명했다.
if (!function_exists('createDefaultAvatar')) {
    function createDefaultAvatar()
    {
    }
}
이것은 대부분의 것을 수용할 것입니다. 만약 모든 이미지 생성 작업과 조작이 아니라면, 제 OOP 친구에게 미안하지만, 이것은 SRP를 깨뜨릴 것입니다.😱

🌄 캔버스를 만들래요.


다음 단계는 처리할 이미지 흐름을 만드는 것입니다. 이를 위해 imagecreate 함수를 사용합니다. widthheight의 두 가지 파라미터를 받아들여 픽셀 단위로 새로운 팔레트 기반 이미지를 만들 것입니다. 따라서 함수에 추가하고 widthheight을 기본 크기의 파라미터로 전달합니다.
function createDefaultAvatar(
    int $width = 600,
    int $height = 600
) {
    $image = @imagecreate($width, $height)
        or die("Cannot Initialize new GD image stream");

    return $image;
}
네, resource으로 hint 반환 값을 입력할 수 있습니다. 그러나 문제가 발생할 수 있는 것은 resource이 유효한 반환 값이 아니기 때문입니다.
Fatal error: Uncaught TypeError: Return value of createDefaultAvatar() must be an instance of resource, resource returned

🎨 색깔을 추가할 때가 됐어요.


만약 약간의 색깔이 없다면, 그림은 무엇입니까?이미지에 색을 추가하기 위해서, 우리는 imagecolorallocate 함수로 색을 분배합니다. imagecreate 함수를 사용했기 때문에, 처음으로 imagecolorallocate()을 호출하면 우리의 배경색을 채울 것입니다.
이 부분을 함수에 추가합니다. 이 함수를 두 번 호출하고 매개 변수에 기본 색을 추가합니다.
function createDefaultAvatar(
    ...,
    array $bgColor = [0, 0, 0],
    array $textColor = [255, 255, 255]
) {
    ...
    imagecolorallocate($image, $bgColor[0], $bgColor[1], $bgColor[2]);

    $fontColor = imagecolorallocate($image, $textColor[0], $textColor[1], $textColor[2]);

    return $image;
}
여기에서 기본 $bgColor을 검은색으로 설정하고 $textColor을 흰색으로 설정합니다.

🏋️‍♀️ 역도를 좀 할 때가 됐어요.


현재, 우리는 이 함수에서 가장 크고 가장 어려운 부분에 들어가서 텍스트를 수직과 수평 방향에서 가운데로 놓을 것이다. 그러기 위해서, 우리는 imagettfbbox을 사용하여 TrueType 텍스트의 경계 상자를 가져와야 한다. 이것은 텍스트 경계 상자의 모든 네 개의 점의 수조를 되돌려줄 것이다.
그러려면 글꼴 크기, TrueType 파일의 경로 및 텍스트를 입력해야 합니다.
function createDefaultAvatar(
    ...
    string $text = 'DEV',
    int $fontSize = 140,
    string $font = './arial.ttf'
) {
    ...
    $textBoundingBox = imagettfbbox($fontSize, 0, $font, $text);

    return $image;
}
두 번째 논점은 우리 텍스트의 각도이다. 우리는 이것에 관심이 없다.
이 단계의 다음 부분은 텍스트를 계산하는 새로운 $x$y 좌표입니다. 따라서 imagettfbbox 함수를 호출한 후에 추가하겠습니다.
$y = abs(ceil(($height - $textBoundingBox[5]) / 2));
$x = abs(ceil(($width - $textBoundingBox[2]) / 2));
이것은 경계 상자를 둘로 나누어 중간을 얻어 위치를 계산하고 이미지의 높이나 너비 사이의 분할을 정정하여 절대값을 얻는다.

주:
몇몇 실험 후에 나는 abs 함수를 추가했는데 ceil만 있고 텍스트는 때때로 픽셀에 의해 결정된다.
글꼴 파일과 일치하는 효과를 얻기 위해 경계 상자 값을 사용해야 할 수도 있습니다.

✍️ 글을 쓸 때가 됐어요.


우리 함수의 마지막 단계는 텍스트를 그림에 쓰는 것입니다. 지금까지 우리가 한 것은 그림을 만들고 색을 설정하며 텍스트가 놓여야 할 위치를 계산하는 것입니다. 현재 우리는 imagettftext을 사용하여 텍스트를 그림에 쓸 것입니다.
그림을 되돌리기 전에, 우리는 먼저 새 좌표 $fontColor, $font$text으로 그것을 썼다.
function createDefaultAvatar(
    ...
) {
    ...
    imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $text);

    return $image;
}

상술한 바와 같이, 본 예에서 0은 우리의 각도이며, 우리는 이런 것에 관심을 두지 않는다.

🎉 완료된 함수


매개 변수를 전환하여 함수의 사용에 더욱 잘 적응한 후 최종 함수는 다음과 같다.
if (!function_exists('createDefaultAvatar')) {
    function createDefaultAvatar(
        string $text = 'DEV',
        array $bgColor = [0, 0, 0],
        array $textColor = [255, 255, 255],
        int $fontSize = 140,
        int $width = 600,
        int $height = 600,
        string $font = './arial.ttf'
    ) {
        $image = @imagecreate($width, $height)
            or die("Cannot Initialize new GD image stream");

        imagecolorallocate($image, $bgColor[0], $bgColor[1], $bgColor[2]);

        $fontColor = imagecolorallocate($image, $textColor[0], $textColor[1], $textColor[2]);

        $textBoundingBox = imagettfbbox($fontSize, 0, $font, $text);

        $y = abs(ceil(($height - $textBoundingBox[5]) / 2));
        $x = abs(ceil(($width - $textBoundingBox[2]) / 2));

        imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $text);

        return $image;
    }
}
매개 변수가 없는 상황에서 우리의 새 함수 createDefaultAvatar();을 호출하면 다음과 같은 그림을 만들 수 있습니다.

현재 우리는 이 함수를 사용하여 사용자의 초기 화신을 만들 수 있으며, 단지 새로운 자모를 우리의 함수에 전달하기만 하면 된다.

createDefaultAvatar("KH")

😮 더 많은 용법.


왜 더 많은 PHP 함수를 사용하지 않고 브라우저에서 그림을 되돌려줍니까?우리도 이렇게 할 수 있다.🙌
$img = createDefaultAvatar();

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

imagepng($img);
imagedestroy($img);
이제 브라우저에서 파일에 액세스하면 PHP가 브라우저에 이미지를 표시하고 imagepng의 두 번째 매개 변수로 이미지를 저장할 수 있습니다.

😎 이별에 즈음하여 증언하다.


그럼 이 작품 준비됐어요?개선할 수 있습니까?나는 첫 번째에게는 가능하다고 말하고, 두 번째에게는 절대라고 말할 것이다.
이것은 단지 하나의 강좌일 뿐, 개념적 증명이라고 할 수 있다.
나는 그것을 자신의 클래스로 분해할 것이다. 아마도 서비스 클래스일 것이다. 이 클래스는 데이터베이스에 저장할 위치 경로를 만들고 저장하며 나중에 참고할 수 있도록 되돌려 줄 것이다.
하지만 나는 너에게 남겨 줄 것이다. 네가 그것을 좋아하길 바란다. 읽어주고 안녕히 계세요.👋

TL;박사


소스 코드:

thinkverse / 화신을 만들다


PHP 7에서 기본 사용자 초기 화신 만들기


좋은 웹페이지 즐겨찾기