온라인 편집
사용된 JS 플러그인:
qrcodesvg
정보를 기반으로 QR코드 플러그인 그리기
컬러피커
색상 선택에 사용되며 js 바인딩 이벤트는 QR 코드(svg)의 색상을 변경합니다.
캔브그
svg 형식의 QR 코드를 html5 캔버스로 변환한 후 toDataURL 메소드를 사용하여 QR 코드 이미지의 base64 인코딩 데이터를 생성하고 Ajax를 통해 백엔드로 전송하는 데 사용됩니다.
열전사 프린터로 QR 코드 인쇄
사진은 BMP 형식으로 변환되어야 합니다. 이미지를 BMP로 변환하는 클래스:
- /**
- * 클래스 jpg, gif, png =========> BMP
- *
- * { 설명 :-
- * jpg, gif 또는 png의 크기를 조정하고 bmp로 변환하는 클래스
- * }
- * 자세한 내용은 저에게 문의하세요(mahabub1212@yahoo.com). )
- * 이 클래스는 수정, 사용, 재배포가 가능합니다.
- */
- class ToBmp{
-
- // 새 이미지 너비
- var $new_width;
-
- // 새 이미지 높이
- var $new_height;
-
- // 이미지 리소스
- var $image_resource;
-
- function image_info($source_image ){
- $img_info = getimagesize($source_image);
-
- 스위치 ($img_info['mime']){
- 케이스 "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); }
- 케이스 "이미지/gif": { $this->image_resource = imagecreatefromgif ($source_image) }
- 케이스 "이미지/png": { $this-> ;image_resource = imagecreatefrompng($source_image); break; }
- 기본값: {die("그림 오류");}
- }
- }
-
-
- 공용 함수 imagebmp($file_path = ''){
-
- if(!$this->image_resource) die("사진 오류");
- $picture_width = Imagesx($this->image_resource);
- $picture_height = imagey($this->image_resource);
-
-
- if(!imageistruecolor($this->image_resource)){
- $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height);
- imagecopy($tmp_img_resource,$this->image_resource, 0, 0, 0, 0, $picture_width, $picture_height);
- imagedestroy($this->image_resource);
- $this-> image_resource = $tmp_img_reource;
-
- }
-
-
- if((int) $this->new_width >0 && (int) $this->new_height > 0){
-
- $image_resize = imagecreatetruecolor($this->new_width, $this->new_height)
- imagecopyresampled($image_resize,$this->image_resource,0,0,0,0,$ this->new_width,$this->new_height,$picture_width,$picture_height);
- imagedestroy($this->image_resource);
- $this->image_resource = $image_resize;
-
- }
-
- $result = '';
-
- $biBPLine = ((int) $this->new_width >0 &&(int)$this->new_height > 0 ) ? $this->new_width * 3 : $picture_width * 3;
- $biStride = ($biBPLine 3) & ~3;
- $biSizeImage = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $biStride * $this->new_height : $biStride * $picture_height;
- $bfOffBits = 54;
- $bfSize = $bfOffBits $biSizeImage;
-
- $result .= substr('BM', 0, 2);
- $result .= pack('VvvV', $bfSize, 0, 0, $bfOffBits);
- $result .= ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? pack ('VVVvvVVVVVV', 40, $this->new_width, $this-> new_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0) : 팩 ('VVVvvVVVVVV', 40, $picture_width, $picture_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0 );
-
- $numpad = $biStride - $biBPLine;
-
- $h = ((int) $this->new_width >0 &&(int)$this->new_height > ; 0) ? $this->new_height : $picture_height;
- $w = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? ->new_width : $picture_width;
-
- for ($y = $h - 1; $y >= 0; --$y) {
- for ($x = 0; $x < ; $w; $x) {
- $col = imagecolorat ($this->image_resource, $x, $y);
- $result .= substr(pack ('V', $col), 0 , 3);
- }
- for ($i = 0; $i < $numpad; $i) {
- $result .= pack ('C', 0);
- }
- }
- if($file_path == ''){
- header("콘텐츠 유형: 이미지/bmp");
- echo $result;
- } else {
- $fp = fopen($file_path,"wb");
- fwrite($fp,$result);
- fclose($fp);
- //= ============
- }
- 반환
- }
- }
코드 복사
사용방법
- $ToBMP = new ToBmp();
- $ToBMP->image_info($path_to_img);
- $ToBMP->new_width = 255;
- $ ToBMP->new_height = 255;
- $output_path = realpath(PATH.'test.bmp');
- $ToBMP->imagebmp($output_path);
-
코드 복사
BMP 형식은 파일 헤더 정보에 따라 데이터 구성 구조가 다릅니다
내 것은 24비트 BMP입니다. 헤더 파일의 54바이트를 제거한 후 3바이트(RGB)마다 포인트를 나타냅니다.
RGB(3바이트를 1바이트)로 결합한 후 픽셀 포인트를 이진화합니다(1비트를 얻습니다. 즉, 점이 흑백입니다. 이진화하는 이유는 제 열전사 프린터가 흑백으로 인쇄하지만 컬러로 인쇄하지 않기 때문입니다) ).
각 8bit를 1byte로 연결하여 'xx'라는 16진수 형태로 표현합니다. 프린터에서 제공하는 인터페이스에 따라 데이터를 프린터로 전송하여 인쇄할 수 있습니다.
특별한 주의:
1.unpack 사용법
- $content = file_get_contents($path_to_img);
- $content = unpack("H*", $content) //이미지 데이터의 16진수 표현 가져오기
-
코드 복사
2.
'xFE'는 4자를 나타냅니다
"xFE"는 1개의 문자(즉, 16진수에 해당하는 ASCII 코드 문자)를 나타냅니다.
작은따옴표는 chr('0xFE')를 사용하여 변환할 수 있습니다.
|