PHP의 GD로 시송 모양 내보내기

4593 단어 PHPGD
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;
}

좋은 웹페이지 즐겨찾기