摘要:在線編輯使用到的插件根據信息繪制二維碼插件用于顏色選擇,綁定事件更改二維碼的顏色用于將格式的二維碼轉換成的,之后使用方法生成二維碼圖片的編碼數據,通過發送給后端熱敏打印機打印二維碼圖片要轉成格式。
在線編輯
使用到的 js 插件:
qrcodesvg
根據信息繪制二維碼插件
colorPicker
用于顏色選擇,js綁定事件更改二維碼(svg)的顏色
canvg
用于將svg格式的二維碼轉換成 html5 的 canvas ,之后使用 toDataURL 方法生成二維碼圖片的 base64 編碼數據 ,通過 Ajax 發送給后端
熱敏打印機打印二維碼圖片要轉成BMP格式。轉換圖片到BMP的類:
BMP * * { Description :- * class that resize and convert jpg, gif or png to bmp * } * for more info contact with me (mahabub1212@yahoo.com) * you can modify or use or redistribute this class. */ class ToBmp{ // new image width var $new_width; // new image height var $new_height; // image resources var $image_resource; function image_info($source_image){ $img_info = getimagesize($source_image); switch ($img_info["mime"]){ case "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); break; } case "image/gif": { $this->image_resource = imagecreatefromgif ($source_image); break; } case "image/png": { $this->image_resource = imagecreatefrompng ($source_image); break; } default: {die("圖片錯誤");} } } public function imagebmp($file_path = ""){ if(!$this->image_resource) die("圖片錯誤"); $picture_width = imagesx($this->image_resource); $picture_height = imagesy($this->image_resource); if(!imageistruecolor($this->image_resource)){ $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height); imagecopy($tmp_img_reource,$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_resized = imagecreatetruecolor($this->new_width, $this->new_height); imagecopyresampled($image_resized,$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_resized; } $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) : pack ("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) ? $this->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("Content-type: image/bmp"); echo $result; } else { $fp = fopen($file_path,"wb"); fwrite($fp,$result); fclose($fp); //============= } return ; } }
使用方法
$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個字節后,每三個字節(RGB)表示一個點。
合并RGB(三字節合并為一字節)后二值化像素點(得到 1bit ,即該點是黑或白。之所以要二值化是因為我的熱敏打印機打印黑白不打印彩色)。
每 8bit 拼接成1字節后用 "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") 進行轉換
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20602.html
摘要:將信號拉高激活打印元件,接著使步進電機轉動兩步完成一點行的打印。步進電機的步長為,一點行的寬度為,因此打印出一點行的數據需要步進電機轉兩步。由于步進電機和熱敏頭不能長時間連續工作,因此打印份數不宜設置過多,否則容易燒壞電機和熱敏頭。 ...
摘要:和要先打開,再在目錄下執行,和在目錄下執行注啟動,后臺代碼更改才會實時響應有問題可發郵箱,有看到有空會回 項目完整代碼 github地址:singleStore 效果圖: showImg(https://segmentfault.com/img/bVbgFMz?w=640&h=1136);showImg(https://segmentfault.com/img/bVbgFMA?w=64...
摘要:在網上搜了一些方法,做法是獲取二維碼元素賦值給整個的,然后再調用瀏覽器的打印功能,缺點是會改變整個頁面,需要刷新恢復。但問題還不止于此,由于二維碼是在線生成的,獲取到的二維碼元素沒有實際內容,所以這個方法不可行。 二維碼由jquery.qrcode.min.js將json字符串轉換而成,細節不再贅述,效果如圖:showImg(https://segmentfault.com/img/b...
摘要:配置需要一個來用于與虛擬機進行連接,默認假定這個密鑰會被放在文件夾下。三使用管理項目版本使用可以對我們的代碼進行版本控制,如果萬一誤刪了代碼想回到之前的情況,則可以通過版本控制進行回滾。配置選項代表對進行全局設置。 laravel學習筆記,重新梳理知識點。 一、環境配置 1、編輯器選用 Atom PHPStorm SublimeText Atom 是由 GitHub 官方在 201...
摘要:并發和并行并發和并行是兩個非常容易被混淆的概念。并發說的是在一個時間段內,多件事情在這個時間段內交替執行。并行說的是多件事情在同一個時刻同事發生。由于線程池是一個線程,得不到執行,而被餓死,最終導致了程序死鎖的現象。 同步(Synchronous)和異步(Asynchronous) 同步和異步通常來形容一次方法調用,同步方法調用一旦開始,調用者必須等到方法調用返回后,才能繼續后續的行為...
閱讀 1785·2023-04-26 00:47
閱讀 1543·2021-11-11 16:55
閱讀 2597·2021-09-27 14:04
閱讀 3548·2021-09-22 15:58
閱讀 3554·2021-07-26 23:38
閱讀 2129·2019-08-30 13:47
閱讀 1979·2019-08-30 13:15
閱讀 1142·2019-08-29 17:09