前言 Python 在程式並行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和 GIL,我覺得錯誤的教學指導才是主要問 題。常見的經典 Python 多線程、多進程教程多顯得偏"重"。而且往往隔靴搔癢,沒有深入探討日常工作中最有用的內容。 傳統的例子 簡單搜索下"Python 多線程教程" ...
1.簡介
最近有個需求,就是把圖片驗證碼轉化為base64格式,tp5框架自帶的think-captcha擴展包可以實現。但是,它有個缺點,不能獲取驗證碼的值。在做前後端分離項目的時候,驗證碼檢測有兩種方式,各有利弊。
方式一:因為session不能共用,所以通過傳遞唯一uuid,後端用redis存儲uuid對應的驗證碼,驗證同理。
方式二:直接返回驗證碼的同時,把驗證值也返回給前端,在前端去驗證驗證碼的有效性
下麵不多說,看代碼。(如果你還有第三種方法,歡迎留言,共同學習)
2.代碼片段
$width = 100;
$height = 30;
$size = 4;
$fontSize = 10;
$image = imagecreatetruecolor((int)$width, (int)$height);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
$content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$captcha = "";
for ($i = 0; $i < $size; $i++) {
$fontsize = $fontSize;
$fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
$fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
$captcha .= $fontcontent;
$x = ($i * $width / 4) + mt_rand(5, 10);
$y = mt_rand(5, 10);
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
imagepng($image);
$content = ob_get_clean();
imagedestroy($image);
$base64 = 'data:image/png;base64,' . base64_encode($content);
return json_encode(['code' => 0, 'data' => ['base64' => $base64, 'text' => $captcha], 'message' => '操作成功']);
本文來自博客園,作者:淙淙溪流,轉載請註明原文鏈接:https://www.cnblogs.com/pitmanhuang/p/16199473.html