PHP 7에서 기본 사용자 초기 화신 만들기🤘😎
🤔 '묵인'화신은 무엇입니까?
사용자가 올린 자료, 예를 들어 프로필 사진과 관련될 때 일부 사용자는 업로드를 피할 수 있다. 이런 상황에서 합리적인 반환을 제공하는 것은 적당한 일이다. 일반적으로 보면 간단하고 배경이 간단하며 일부 인물은 한 사람의 윤곽, 응용 프로그램 로고나 계란과 같다.어떤 사람들은 사용자 이니셜이 있는 사용자 정의 반환을 제공하여 사용자 간에 반환을 다르게 할 수 있다.
이것이 바로 우리가 지금 해야 할 일이다.🤯
📃 요구 사항
이를 위해서는 PHP 7+
을 실행하고 FreeType을 지원해야 합니다.
--with-freetype-dir=DIR
로컬 테스트에 사용할 .ttf
파일이 필요합니다. 시스템 글꼴 저장소에서 파일을 복사할 수 있습니다. 파일이 어디에 있든지 간에.생산에 사용하려면 합법적인 상업용 사본을 얻으십시오.
코드를 작성하기 시작합시다.✍️
🔨 우리 기금회
우리가 이렇게 좋은 것을 얻기 전에, 우리는 우선 내무 처리를 해야 한다. 우리는 그것을 한쪽에 놓고, 우리의 새로운 함수를 만들어야 한다. 나는 그것을 createDefaultAvatar()
이라고 명명했다.
if (!function_exists('createDefaultAvatar')) {
function createDefaultAvatar()
{
}
}
이것은 대부분의 것을 수용할 것입니다. 만약 모든 이미지 생성 작업과 조작이 아니라면, 제 OOP 친구에게 미안하지만, 이것은 SRP를 깨뜨릴 것입니다.😱
🌄 캔버스를 만들래요.
다음 단계는 처리할 이미지 흐름을 만드는 것입니다. 이를 위해 imagecreate 함수를 사용합니다. width
과 height
의 두 가지 파라미터를 받아들여 픽셀 단위로 새로운 팔레트 기반 이미지를 만들 것입니다. 따라서 함수에 추가하고 width
과 height
을 기본 크기의 파라미터로 전달합니다.
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에서 기본 사용자 초기 화신 만들기
Reference
이 문제에 관하여(PHP 7에서 기본 사용자 초기 화신 만들기🤘😎), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/thinkverse/creating-default-user-initial-avatars-in-php-7-1gf1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
--with-freetype-dir=DIR
if (!function_exists('createDefaultAvatar')) {
function createDefaultAvatar()
{
}
}
function createDefaultAvatar(
int $width = 600,
int $height = 600
) {
$image = @imagecreate($width, $height)
or die("Cannot Initialize new GD image stream");
return $image;
}
Fatal error: Uncaught TypeError: Return value of createDefaultAvatar() must be an instance of resource, resource returned
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;
}
function createDefaultAvatar(
...
string $text = 'DEV',
int $fontSize = 140,
string $font = './arial.ttf'
) {
...
$textBoundingBox = imagettfbbox($fontSize, 0, $font, $text);
return $image;
}
$y = abs(ceil(($height - $textBoundingBox[5]) / 2));
$x = abs(ceil(($width - $textBoundingBox[2]) / 2));
function createDefaultAvatar(
...
) {
...
imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $text);
return $image;
}
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("KH")
$img = createDefaultAvatar();
header("Content-Type: image/png");
imagepng($img);
imagedestroy($img);
Reference
이 문제에 관하여(PHP 7에서 기본 사용자 초기 화신 만들기🤘😎), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thinkverse/creating-default-user-initial-avatars-in-php-7-1gf1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)