2014-09-15 2 views
1

저는 www-connectivity가없고 인스톨 된 그래픽 라이브러리가없는 인트라넷 서버에서 PHP를 실행하고 있습니다. 이제 16x16 픽셀의 색상 블록 (# 86D0FF로 표시됨)을 만들어야하고 라이브러리를 설치하지 않고도 간단한 작업을 위해 필요한 바이트 시퀀스를 반환 할 수 있는지 궁금합니다. 즉모든 라이브러리를 사용하지 않고 PHP로 원시 이미지를 만드는 방법은 무엇입니까?

: 나는 GD를 설치하지 않고 다음을 달성하고 싶습니다 :

<?php 
    header("Content-Disposition: Attachment;filename=image.png"); // so that it can be saved... 
    header("Content-type: image/png"); 

    $img = imagecreate(16,16); 
    $color = imagecolorallocate($image , 134 , 208 , 255); 
    imagefilledrectangle($image , 0 , 0 , 16 , 16 , $color); 
    imagepng($image); 
    imagedestroy($image); 
+0

웹 페이지에 표시 될 예정입니까? – fie

+0

인트라넷 사이트 용입니다. 예, 브라우저에 전달됩니다. 아니요, wwww에 없을 것입니다. – MBaas

+0

컬러 블럭을 표시 할 필요가 있다면 HTML로 할 수 있습니다. fie

답변

1

좋아, 나는 해결책을 찾아 냈다. 생성 된 샘플을 JPG, ICO, PNG 및 GIF로 저장하고 16 진수 편집기로 살펴본 결과 GIF가 가장 쉬운 것으로 보였습니다. 그래서 저는 현재 기존의 GIF를 (템플릿으로) 읽으며 (특정 파일에서) 색상 값을 보유하고있는 바이트 [37..39] 만 조작하고 있습니다.

내가 정의한 CSS-File에서 가져온 색상 값이므로 CSS 파싱도 약간 있습니다. 어쩌면 코드가 도움이 될 수 있습니다 .-)

<?php 

    $css = file_get_contents('my.css'); 
    $col = $_GET["col"]; // file is referenced using /coloursample.php?col=# 
    $patt = '/\.colGroup' . $col . '.*?background-color:.*?\#([A-F0-9]{3,6};/six'; 
    $bin = file_get_contents('sample.gif'); 
    if (preg_match($patt,$css,$regs)) 
    { 
     $bin[37] = chr(hexdec(substr($regs[1],0,2))); 
     $bin[38] = chr(hexdec(substr($regs[1],2,2))); 
     $bin[39] = chr(hexdec(substr($regs[1],4,2))); 
    } 


    header("Content-Disposition: Attachment; filename=color" . $regs[1] . "gif"); 
    header("Cpntent-type: image/gif"); 
    echo $bin; 
+0

나는 왜 그것이 이미지 일 필요가 있는지 이해할 수 없다. 그러나 그것이 16x16 이었기 때문에 나는 비트 맵 스펙을 찾아 볼 것을 권한다. 내가 봤던 것에서 24 비트 색상 깊이를 수행하고 있다면 PHP로 비트 맵 파일을 만드는 것이 꽤 쉬워야합니다. 어려운 부분은 헤더를 구성하는 것입니다. 그 후에 그것은 단지 바이트 RGBRGBRGBRGB로 바이트를 씁니다. – fie

+0

나는 contextmenu를 만들고 있는데, 내가 사용하고있는 라이브러리는 이미지를 메뉴 옵션에 붙이려고 할 때 사용할 이미지가 필요하다. 그리고 내 솔루션으로, 나는 당신의 제안을 따르고있다. 나는 GIF가 조작하기 쉽다는 것을 발견했다. (나는 "템플릿"-GIF를 사용하고 적절한 위치에 색을 주입한다. 단지 3 바이트를 바꿀 필요가있다.) – MBaas

+0

coooooooooooool – fie

관련 문제