PHP의 GD로 시송 모양 내보내기
보통 이런 그림을 만들 때 포토샵 등 영상처리 소프트웨어로 아빠와 함께 한다
PHP만 가능합니다. 이것은 몇 년 전에 쓴 함수입니다.
GD는 PHP를 사용하면 임대 서버 등의 기능이 축소된 환경에서도 사용할 수 있다
그런 사건에서 많은 보살핌을 받다.
GD를 통해 투명도를 설정할 때
이번에는 이미지 coolorallocatelalpha 함수를 사용합니다
투명도를 0에서 127까지의 128단계로 설정합니다.
RGB 값은 각각 16진수 색상 코드로, #만약의 경우처럼 총 256등급이므로 주의해야 합니다.
이 함수에서 색을 지정할 때, 16진 컬러 코드 (알파의 8자리) 로 지정합니다.
근사값으로 변환합니다.
출력 예제.흰색과 회색의 시송 패턴은 투명한 색으로 보인다.정말 불가사의하다.
<?php
/**
* create_checkered_pattern_image
*
* 市松模様を出力する
* みる人がみたら透過色にみえる不思議
*
* @param integer $width 画像幅
* @param integer $height 画像高
* @param integer $gridSize グリッド(升目)の大きさ
* @param string $bgColor 背景色(6桁、もしくはアルファを含む8桁のカラーコード(#000000 or #00000000))
* @param string $fillColor 塗り色(6桁、もしくはアルファを含む8桁のカラーコード(#000000 or #00000000))
* @param string $format 画像フォーマット(jpeg, gif, pngいずれか)
*
* // 直接出力する場合
* header('content-type: image/' . $format);
* create_checkered_pattern_image($width, $height, $gridSize, $bgColor, $fillColor, $format);
*
* // htmlタグを出力する場合、$base64encodeを真にする
* echo '<img src="data:image/' . $format . ';base64,' . create_checkered_pattern_image($width, $height, $gridSize, $bgColor, $fillColor, $format, true) . '">';
*/
// 例: 透明っぽい市松模様
// 画像幅
$width = 240;
// 画像高
$height = 240;
// グリッド(升目)の大きさ
$gridSize = 20;
// 背景色(6桁、もしくはアルファを含む8桁のカラーコード(#000000 or #00000000))
$bgColor = '#ffffff';
// 塗り色(6桁、もしくはアルファを含む8桁のカラーコード(#000000 or #00000000))
$fillColor = '#afafaf';
// 画像フォーマット(jpeg, gif, pngいずれか)
$format = 'png';
header('content-type: image/' . $format);
echo create_checkered_pattern_image($width, $height, $gridSize, $bgColor, $fillColor, $format);
function create_checkered_pattern_image($width, $height, $gridSize, $bgColor, $fillColor, $format = 'png', $base64encode = false, $reverse = false) {
// カラーコードであるか
$colorCodeRegex = '/^(?:#)?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i';
// jpg = jpeg
if ($format == 'jpg') $format = 'jpeg';
if (preg_match($colorCodeRegex, $fillColor, $color)) {
$fillRed = $color[1];
$fillGreen = $color[2];
$fillBlue = $color[3];
if (isset($color[4])) $fillAlpha = $color[4];
} else {
return false;
}
if (preg_match($colorCodeRegex, $bgColor, $color)) {
$bgRed = $color[1];
$bgGreen = $color[2];
$bgBlue = $color[3];
if (isset($color[4])) $bgAlpha = $color[4];
} else {
return false;
}
if (!in_array($format, array('gif', 'jpeg', 'png'))) return false;
$image = imagecreate($width, $height);
if (isset($bgAlpha)) {
$bg = imagecolorallocatealpha($image, hexdec($bgRed), hexdec($bgGreen), hexdec($bgBlue), create_checkered_pattern_image_alpha_convert($bgAlpha));
} else {
$bg = imagecolorallocate($image, hexdec($bgRed), hexdec($bgGreen), hexdec($bgBlue));
}
if (isset($fillAlpha)) {
$fill = imagecolorallocatealpha($image, hexdec($fillRed), hexdec($fillGreen), hexdec($fillBlue), create_checkered_pattern_image_alpha_convert($fillAlpha));
} else {
$fill = imagecolorallocate($image, hexdec($fillRed), hexdec($fillGreen), hexdec($fillBlue));
}
$i = 0;
for ($y = 0; $y <= $height; $y += $gridSize) {
if (!$reverse) {
$i++;
}
$i % 2 == 0 ? $s = 0 : $s = $gridSize;
for ($x = $s; $x < $width; $x += $gridSize * 2) {
imagefilledrectangle($image, $x, $y, $x + $gridSize - 1, $y + $gridSize - 1, $fill);
}
if ($reverse) {
$i++;
}
}
if ($base64encode) {
ob_start();
} else {
header('content-type: image/' . $format);
}
switch ($format) {
case 'gif':
imagegif($image);
break;
case 'jpeg':
case 'jpg':
imagejpeg($image, null, 100);
break;
case 'png':
imagepng($image);
break;
}
if ($base64encode) {
$ob = ob_get_contents();
ob_clean();
return base64_encode($ob);
}
}
function create_checkered_pattern_image_alpha_convert($in) {
return (int) floor((hexdec($in) / 2 ) - 127) * -1;
}
Reference
이 문제에 관하여(PHP의 GD로 시송 모양 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/senapoyo/items/ff4df8eb64cc03fe7373텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)