>백엔드 개발 >PHP 튜토리얼 >QR 코드를 온라인으로 편집하고 열전사 프린터로 보내 인쇄하세요.

QR 코드를 온라인으로 편집하고 열전사 프린터로 보내 인쇄하세요.

WBOY
WBOY원래의
2016-07-25 08:46:272716검색
온라인 편집

사용된 JS 플러그인:

qrcodesvg

정보를 기반으로 QR코드 플러그인 그리기 컬러피커

색상 선택에 사용되며 js 바인딩 이벤트는 QR 코드(svg)의 색상을 변경합니다. 캔브그

svg 형식의 QR 코드를 html5 캔버스로 변환한 후 toDataURL 메소드를 사용하여 QR 코드 이미지의 base64 인코딩 데이터를 생성하고 Ajax를 통해 백엔드로 전송하는 데 사용됩니다. 열전사 프린터로 QR 코드 인쇄

사진은 BMP 형식으로 변환되어야 합니다. 이미지를 BMP로 변환하는 클래스:

  1. /**
  2. * 클래스 jpg, gif, png =========> BMP
  3. *
  4. * { 설명 :-
  5. * jpg, gif 또는 png의 크기를 조정하고 bmp로 변환하는 클래스
  6. * }
  7. * 자세한 내용은 저에게 문의하세요(mahabub1212@yahoo.com). )
  8. * 이 클래스는 수정, 사용, 재배포가 가능합니다.
  9. */
  10. class ToBmp{
  11. // 새 이미지 너비
  12. var $new_width;
  13. // 새 이미지 높이
  14. var $new_height;
  15. // 이미지 리소스
  16. var $image_resource;
  17. function image_info($source_image ){
  18. $img_info = getimagesize($source_image);
  19. 스위치 ($img_info['mime']){
  20. 케이스 "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); }
  21. 케이스 "이미지/gif": { $this->image_resource = imagecreatefromgif ($source_image) }
  22. 케이스 "이미지/png": { $this-> ;image_resource = imagecreatefrompng($source_image); break; }
  23. 기본값: {die("그림 오류");}
  24. }
  25. }
  26. 공용 함수 imagebmp($file_path = ''){
  27. if(!$this->image_resource) die("사진 오류");
  28. $picture_width = Imagesx($this->image_resource);
  29. $picture_height = imagey($this->image_resource);
  30. if(!imageistruecolor($this->image_resource)){
  31. $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height);
  32. imagecopy($tmp_img_resource,$this->image_resource, 0, 0, 0, 0, $picture_width, $picture_height);
  33. imagedestroy($this->image_resource);
  34. $this-> image_resource = $tmp_img_reource;
  35. }
  36. if((int) $this->new_width >0 && (int) $this->new_height > 0){
  37. $image_resize = imagecreatetruecolor($this->new_width, $this->new_height)
  38. imagecopyresampled($image_resize,$this->image_resource,0,0,0,0,$ this->new_width,$this->new_height,$picture_width,$picture_height);
  39. imagedestroy($this->image_resource);
  40. $this->image_resource = $image_resize;
  41. }
  42. $result = '';
  43. $biBPLine = ((int) $this->new_width >0 &&(int)$this->new_height > 0 ) ? $this->new_width * 3 : $picture_width * 3;
  44. $biStride = ($biBPLine 3) & ~3;
  45. $biSizeImage = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $biStride * $this->new_height : $biStride * $picture_height;
  46. $bfOffBits = 54;
  47. $bfSize = $bfOffBits $biSizeImage;
  48. $result .= substr('BM', 0, 2);
  49. $result .= pack('VvvV', $bfSize, 0, 0, $bfOffBits);
  50. $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 );
  51. $numpad = $biStride - $biBPLine;
  52. $h = ((int) $this->new_width >0 &&(int)$this->new_height > ; 0) ? $this->new_height : $picture_height;
  53. $w = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? ->new_width : $picture_width;
  54. for ($y = $h - 1; $y >= 0; --$y) {
  55. for ($x = 0; $x < ; $w; $x) {
  56. $col = imagecolorat ($this->image_resource, $x, $y);
  57. $result .= substr(pack ('V', $col), 0 , 3);
  58. }
  59. for ($i = 0; $i < $numpad; $i) {
  60. $result .= pack ('C', 0);
  61. }
  62. }
  63. if($file_path == ''){
  64. header("콘텐츠 유형: 이미지/bmp");
  65. echo $result;
  66. } else {
  67. $fp = fopen($file_path,"wb");
  68. fwrite($fp,$result);
  69. fclose($fp);
  70. //= ============
  71. }
  72. 반환
  73. }
  74. }
코드 복사

사용방법

  1. $ToBMP = new ToBmp();
  2. $ToBMP->image_info($path_to_img);
  3. $ToBMP->new_width = 255;
  4. $ ToBMP->new_height = 255;
  5. $output_path = realpath(PATH.'test.bmp');
  6. $ToBMP->imagebmp($output_path);
코드 복사

BMP 형식은 파일 헤더 정보에 따라 데이터 구성 구조가 다릅니다

QR 코드를 온라인으로 편집하고 열전사 프린터로 보내 인쇄하세요.

내 것은 24비트 BMP입니다. 헤더 파일의 54바이트를 제거한 후 3바이트(RGB)마다 포인트를 나타냅니다.

RGB(3바이트를 1바이트)로 결합한 후 픽셀 포인트를 이진화합니다(1비트를 얻습니다. 즉, 점이 흑백입니다. 이진화하는 이유는 제 열전사 프린터가 흑백으로 인쇄하지만 컬러로 인쇄하지 않기 때문입니다) ).

각 8bit를 1byte로 연결하여 'xx'라는 16진수 형태로 표현합니다. 프린터에서 제공하는 인터페이스에 따라 데이터를 프린터로 전송하여 인쇄할 수 있습니다.

특별한 주의:

1.unpack 사용법

  1. $content = file_get_contents($path_to_img);
  2. $content = unpack("H*", $content) //이미지 데이터의 16진수 표현 가져오기
코드 복사

2.

'xFE'는 4자를 나타냅니다

"xFE"는 1개의 문자(즉, 16진수에 해당하는 ASCII 코드 문자)를 나타냅니다.

작은따옴표는 chr('0xFE')를 사용하여 변환할 수 있습니다.

프린터로 인쇄


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.