반응형
인터넷에서 사진을 많이 찾거나, 때로는 리눅스 서버에 원격으로 접속해 수집한 사진을 보고 싶을 때 ftp로 파일을 다운받아 보는 경우도 있다.
번거롭지만 명령어 아래에서는 확실히 뷰어 앱을 사용할 수 없어서 이 코드를 찾아 글자로 그림을 보여준다.
이제 더 이상 다운로드를 받지 않고도 사진의 대략적인 상황을 그대로 느낄 수 있어 편리해졌다.
<?php
function asciifyImage($img,$asciiscale,$asciicolor,$asciialpha,$asciiblock,$asciiinvert,$asciiresolution,$asciichars){
$strChars = "";
$strFont = "courier new";
$aDefaultCharList = str_split(" .,:;i1tfLCG08@");
$aDefaultColorCharList = str_split(" CGO08@");
$iScale = $asciiscale?$asciiscale:1;
$bColor = $asciicolor;
$bAlpha = $asciialpha;
$bBlock = $asciiblock;
$bInvert = $asciiinvert;
$strResolution = $asciiresolution?$asciiresolution:"low";
$aCharList = $asciichars?$asciichars:($bColor ? $aDefaultColorCharList : $aDefaultCharList);
$fResolution = 0.5;
switch ($strResolution) {
case "low" : $fResolution = 0.25; break;
case "medium" : $fResolution = 0.5; break;
case "high" : $fResolution = 1; break;
}
$im = imagecreatefromjpeg($img);
$iWidth = ceil(imagesx($im) * $fResolution);
$iHeight = ceil(imagesy($im) * $fResolution);
for($y=0;$y<$iHeight;$y+=2){
for($x=0;$x<$iWidth;$x++){
$color_index = imagecolorsforindex($im,imagecolorat($im, ceil($x/$fResolution), ceil($y/$fResolution)));
$iRed = $color_index['red'];
$iGreen = $color_index['green'];
$iBlue = $color_index['blue'];
$iAlpha = $color_index['alpha'];
if ($iAlpha == 100) {
$iCharIdx = 0;
} else {
$fBrightness = (0.3*$iRed + 0.59*$iGreen + 0.11*$iBlue) / 255;
$iCharIdx = (count($aCharList)-1) - ceil($fBrightness * (count($aCharList)-1));
}
if ($bInvert) {
$iCharIdx = (count($aCharList)-1) - $iCharIdx;
}
$strThisChar = $aCharList[$iCharIdx];
if ($strThisChar == " ")
$strThisChar = " ";
if ($bColor) {
$strChars .= "<span style='"
. "color:rgb($iRed,$iGreen,$iBlue);"
. ($bBlock ? "background-color:rgb($iRed,$iGreen,$iBlue);" : "")
. ($bAlpha ? "opacity:" . ($iAlpha/255) . ";" : "")
. "'>" . $strThisChar . "</span>";
} else {
$strChars .= $strThisChar;
}
}
$strChars .= "\r\n";
}
$fFontSize = (2/$fResolution)*$iScale;
$fLineHeight = (2/$fResolution)*$iScale;
$fLetterSpacing = 0;
if ($strResolution == "low") {
switch ($iScale) {
case 1 : $fLetterSpacing = -1; break;
case 2 :
case 3 : $fLetterSpacing = -2.1; break;
case 4 : $fLetterSpacing = -3.1; break;
case 5 : $fLetterSpacing = -4.15; break;
}
}
if ($strResolution == "medium") {
switch ($iScale) {
case 1 : $fLetterSpacing = 0; break;
case 2 : $fLetterSpacing = -1; break;
case 3 : $fLetterSpacing = -1.04; break;
case 4 :
case 5 : $fLetterSpacing = -2.1; break;
}
}
if ($strResolution == "high") {
switch ($iScale) {
case 1 :
case 2 : $fLetterSpacing = 0; break;
case 3 :
case 4 :
case 5 : $fLetterSpacing = -1; break;
}
}
$width = ceil($iWidth/$fResolution)*$iScale;
$height = ceil($iHeight/$fResolution)*$iScale;
$style = "display:inline;width:$width px;height:$height px;white-space:pre;margin:0px;padding:0px;font:$strFont";
$style .= "letter-spacing:$fLetterSpacing px;font-size:$fFontSize px;text-align:left;text-decoration:none";
echo $strChars;
}
if( $argc<=1 ){
$fs = true;
do{
if($fs){
fwrite(STDOUT,'그림 파일 이름을 입력하십시오:');
$fs = false;
}else{
fwrite(STDOUT,'죄송합니다, 이미지 파일 이름은 비워둘 수 없습니다. 이미지 파일 이름을 다시 입력하십시오:');
}
$filename = trim(fgets(STDIN));
}while(!$filename);
$px = 1;
}else{
$filename = $argv[1];
$px = isset($argv[2]) ? $argv[2] : 1;
}
switch($px){
case 1: $pxval = 'low';break;
case 2: $pxval = 'medium';break;
case 3: $pxval = 'high';break;
}
asciifyImage($filename, 3, false, 0, false, false, $pxval, null);
viewImg.php와 같은 php 파일로 저장합니다.
나중에 그림을 보려면 명령줄을 직접 사용하십시오(파일 경로 주의):
php -f viewImg.php yourPhoto.jpg 1
마지막 파라미터 값 1:low Low Low 2:medium 중청 3:high High(이미지가 너무 크면 잘 보이지 않을 수 있습니다.
문자로 구성된 이미지, 마음을 써야 그 내면을 느낄 수 있습니다 - :)
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php 사용자 접근 페이지 언어 클래스 가져오기/ 설정 (0) | 2022.08.09 |
---|---|
Laravel의 Json Response에 의한 PHP 기반 인식 (0) | 2022.08.09 |
php 인증 코드를 만드는 데 사용되는 함수 (0) | 2022.08.09 |
PHP의 session을 redis에 넣습니다 (0) | 2022.08.09 |
PHP 상용 암호화 복호화 함수 (0) | 2022.08.09 |