?a y est, aujourd'hui j'ai écrit un modèle PHP pour générer des codes de vérification basés sur les informations sur Internet :
<?php
// 獲取驗(yàn)證碼(參數(shù):驗(yàn)證碼個(gè)數(shù),驗(yàn)證碼寬度,驗(yàn)證碼高度)
function getCode($num = 4, $width = 100, $height = 30){
session_start();
$authcode='';
// 生成驗(yàn)證碼
for($i=0;$i<$num;$i++){
switch(rand(0,1))
{
case 0:$authcode[$i]=chr(rand(48,57));break; // 數(shù)字
case 1:$authcode[$i]=chr(rand(65,90));break; // 大寫字母
//case 2:$authcode[$i]=chr(rand(97,122));break; // 小寫字母
}
}
$_SESSION["AuthCode"]=$authcode;
$image=imagecreate($width,$height); // 賦值寬度,高度
imagecolorallocate($image,255,255,255); // 設(shè)定圖片背景顏色
// 生成干擾像素
for($i=0;$i<80;$i++){
$dis_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
imagesetpixel($image,rand(1,$width),rand(1,$height),$dis_color);
}
// 打印字符到圖像
for($i=0;$i<$num;$i++){
$char_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
imagechar($image,60,($width/$num)*$i,rand(0,5),$authcode[$i],$char_color);
}
// 將圖片直接輸出
header("Content-type:image/png");
imagepng($image);//輸出圖像到瀏覽器
imagedestroy($image);//釋放資源
}
getCode();
Mais je ne veux pas qu'il produise l'image directement, mais qu'il produise l'image en base64. Comment dois-je faire cela ? J'ai essayé de nombreuses méthodes sans succès, sauf si c'est nécessaire :
$img_file = 'https://www.xxxxxxxxxx.com/authcode.php';
$img_info = getimagesize($img_file);
$img_src = "data:{$img_info['mime']};base64," . base64_encode(file_get_contents($img_file));
echo "<img src='{$img_src}' />";
Comment puis-je sortir directement en base64 dans getCode ?
小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。
La clé pour savoir s'il faut sortir directement les images est
Fermer l'en-tête
fonction imagepng, le deuxième paramètre définit l'emplacement de sauvegarde de l'image.
Lisez ensuite l'emplacement de stockage pour lire l'image et la convertir en base64.
documentation php
La section commentaires sous le document peut avoir les réponses dont vous avez besoin
ob_start();
imagepng($image);
$image_data = ob_get_contents();
ob_end_clean();