日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django 實現(xiàn)將圖片轉為Base64,然后使用json傳輸

瀏覽:205日期:2024-05-28 16:17:44

最近使用Django來進行圖像的傳輸,由于要求需要使用Json格式進行請求,所以我們嘗試了二進制編碼放在json里,發(fā)現(xiàn)bytes格式不能打入json,于是轉為了base64

將圖片轉為json

圖片轉為json有2中方法,一個是二進制后再轉,一個是轉為矩陣以后再轉。

import base64import cv2#通過opencv轉base64img_im= cv2.imread('D://32.png')aa=base64.b64encode(cv2.imencode(’.jpg’,img_im)[1]).decode()print(len(aa)) #17292#通過bytes再轉base64bb=base64.b64encode(open('D://32.png', ’rb’).read())print(len(bb)) #43848

最后采用了Opencv的方式,主要發(fā)現(xiàn)opencv的base64編碼比第二種短一半,所以用了第一種。

客戶端請求發(fā)送數(shù)據(jù)格式

客戶端請求服務器的base64,目前我這里發(fā)現(xiàn)2中,通過Postman測試。

第一種 ‘form/data’:

#客戶端:image1= cv2.imread('D://32.png')aa=base64.b64encode(cv2.imencode(’.jpg’,image1)[1]).decode()r = requests.post(url, data={'image': image1})print(r.content.decode('utf-8'))#服務端:def image_base64(request): result = request.POST.get('image') img_byte = base64.b64decode(result) img_np_arr = np.fromstring(img_byte, np.uint8) image = cv2.imdecode(img_np_arr, cv2.IMREAD_COLOR) #image 已經(jīng)轉為矩陣了

第二種 ‘application/json’:

#客戶端:image1= cv2.imread('D://32.png')aa=base64.b64encode(cv2.imencode(’.jpg’,image1)[1]).decode()r = requests.post(url, json={'image': image1})print(r.content.decode('utf-8'))#服務端:def local_ocr_base64(request): # result = request.POST.get('image') data = request.body data_json=simplejson.loads(data) #data是str格式的,需要轉為json result=data_json['image'] img_byte = base64.b64decode(result) img_np_arr = np.fromstring(img_byte, np.uint8) image = cv2.imdecode(img_np_arr, cv2.IMREAD_COLOR)

補充知識:Django將多個圖片保存成一個URL串返回給前端

說明

Django有ImageField字段,是封裝好的,使用很方便,但是一個ImageField字段只能保存一張圖片的URL,我現(xiàn)在是想將多張圖片保存在一個字段里,然后URL和URL之間用一個自定義的分隔符連接起來,這樣不用為了圖片再設計一個字表。

自定義上傳圖片

設置settings.py文件,添加如下語句

MEDIA_URL = ’/media/’MEDIA_ROOT = os.path.join(BASE_DIR, ’media/’)IMAGE_ROOT = os.path.join(MEDIA_ROOT, ’images/’)WEB_HOST_MEDIA_URL = os.path.join(’http://127.0.0.1:8000’, MEDIA_URL[1:], ’images/’)

MEDIA_ROOT代表的是用戶上傳后的文件一般保存的地方,一般在放在項目目錄下,例如BASE_DIR就是取得項目絕對地址。而MEDIA_URL是指URL訪問時的URL。例如,

BASE_DIR: /Users/incisor/VSCodeProjects/python/Notes

那么

MEDIA_ROOT:/Users/incisor/VSCodeProjects/python/Notes/media

假設media目錄下有一張圖片2019.jpg,那么

MEDIA_URL: http://127.0.0.1:8000/media/

然后再通過http://127.0.0.1:8000/media/2019.jpg這個URL是可以直接訪問這個圖片的。

IMAGE_ROOT是我自定義的一個字段,因為我想以后可能會上傳視頻,或者其他一些文件,想?yún)^(qū)分開,所以我在media目錄下再建了一個目錄images,那么

IMAGE_ROOT: /Users/incisor/VSCodeProjects/python/Notes/media/images

WEB_HOST_MEDIA_URL是拼接URL時使用,因為我接下來要自己拼接多個圖的URL,MEDIA_URL[1:]的原因時如果不去掉第一個/,那WEB_HOST_MEDIA_URL會是/media/images/,這顯然不是我們想要的,所以需要把第一個/去掉。

views.py文件

前端傳過來不定數(shù)量的圖片,可能0張,最多9張,每個圖片都做base64編碼再傳過來,POST請求里有個參數(shù)imgs,是一個數(shù)組,保存base64編碼。

base64編碼如下圖所示,這只是一部分:

前面的data:image/png;base64, 除了后綴會不同,其他的是固定的,所以我會先從這里取得后綴png,再做編碼轉換。

import base64import osimport refrom datetime import date, datetimefrom rest_framework import statusfrom rest_framework.decorators import api_viewfrom rest_framework.response import Responsefrom Notes.settings import IMAGE_ROOT, WEB_HOST_MEDIA_URL@api_view([’POST’,])def images(request): urls = ’’ dir_name = date.today().__str__().replace(’-’, ’_’, 2) # 2019_06_21 dirs = os.path.join(IMAGE_ROOT, dir_name) # 將日期作為目錄名 if not os.path.isdir(dirs): os.makedirs(dirs) # 判斷目錄是否存在,不存在則創(chuàng)建 for img in request.data[’imgs’]: strs = img.split(’,’) suffix = re.findall(r’/(w+?);’, strs[0])[0] # 取得文件后綴 # 拼接服務器上的文件名 # datetime.now()取得當前時間,精確到了微秒,一般來說是唯一的了,因為目錄是日期,所以文件名就去掉日期,最后會是一串數(shù)字 img_name = re.sub(r’:|.’, ’’, datetime.now().__str__().split(’ ’)[1]) + ’.’ + suffix img_path = os.path.join(dirs, img_name) with open(img_path, ’wb’) as out: out.write(base64.b64decode(strs[1])) # base64解碼,再寫入文件 out.flush() urls += os.path.join(WEB_HOST_MEDIA_URL, dir_name, img_name) + ’[/--sp--/]’ # 拼接URL,URL與URL之間用[/--sp--/]隔開 result = {} result[’status’] = status.HTTP_200_OK result[’message’] = ’圖片上傳成功’ result[’urls’] = urls[:len(urls) - len(’[/--sp--/]’)] # 去掉末尾的[/--sp--/] return Response(data=result)

3、urls.py文件

from django.contrib import adminfrom django.urls import pathfrom django.conf.urls.static import static # 需要添加這句,包含靜態(tài)資源之類的from note import viewsfrom . import settingsurlpatterns = [ path(’notes/images/’, views.images), path(’admin/’, admin.site.urls),]urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # 這句不設置的話,不能通過URL直接訪問到圖片

4、啟動服務,python3 manage.py runserver

5、POST請求,然后返回對應的JSON數(shù)據(jù)

{ 'status': 200, 'message': '圖片上傳成功', 'urls': 'http://127.0.0.1:8000/media/images/2019_06_21/073249204253.png[/--sp--/]http://127.0.0.1:8000/media/images/2019_06_21/073249854323.png'}

這樣在數(shù)據(jù)庫方面,就可以直接用一個varchar類型來存儲多張圖了,前端收到URL串,再按照定好的分隔符[/?sp?/]切開后,就可以顯示了。

以上這篇Django 實現(xiàn)將圖片轉為Base64,然后使用json傳輸就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美亚洲精品在线| 国产a久久精品一区二区三区| 性一交一乱一区二区洋洋av| 亚洲免费高清| 在线亚洲欧美| 欧美激情五月| 中文一区一区三区高中清不卡免费| 91精品国产经典在线观看| 亚洲精品日本| 亚洲少妇诱惑| 欧美亚洲激情| 黄色成人精品网站| 中文无码久久精品| 日韩精品一区二区三区中文字幕| 中文字幕亚洲精品乱码| 亚洲专区视频| 国产精品成人自拍| 欧美激情久久久久久久久久久| 欧美国产免费| 久久久久国产精品一区二区| 图片区亚洲欧美小说区| 午夜在线精品| 国产免费av一区二区三区| 国产精品传媒麻豆hd| 久久这里只有| 成人一区而且| 日韩 欧美一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 好吊日精品视频| 国产精品密蕾丝视频下载| 欧美日韩激情| 老鸭窝一区二区久久精品| 蜜臀va亚洲va欧美va天堂| 亚洲欧美成人综合| 精品一二三区| 国产一区二区三区黄网站| 亚洲高清成人| 国产欧美一区二区三区米奇| 亚洲伊人影院| 久久女人天堂| 激情婷婷亚洲| 久久精品影视| 欧美一区=区三区| 久久精品系列| 午夜欧美理论片| 国产日韩欧美| 久久麻豆精品| 欧美影院精品| 国产aa精品| 中文字幕av亚洲精品一部二部| 你懂的国产精品| 国产乱码午夜在线视频| 噜噜噜躁狠狠躁狠狠精品视频| 欧美羞羞视频| 日韩午夜高潮| 亚洲三级av| 国产精品免费不| 亚洲精品电影| 青草国产精品| 蜜桃久久久久久| 欧美搞黄网站| 久久精品av| 免费观看不卡av| 久久久亚洲欧洲日产| 欧美日韩精品一本二本三本| 福利精品在线| 日本成人在线视频网站| 国产精品丝袜在线播放| 蜜桃久久精品一区二区| 日韩久久99| 日本国产精品| 日韩中文av| 免费成人在线观看| 中文一区一区三区高中清不卡免费| 日本午夜精品久久久久| 亚洲一区欧美| 国产精品毛片一区二区三区| 国产韩日影视精品| 麻豆久久久久久久| 奶水喷射视频一区| 日韩在线观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品蜜月aⅴ在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 中文字幕一区二区三区四区久久 | av不卡在线| 久久亚洲电影| 特黄毛片在线观看| 国产精品亚洲片在线播放| 亚洲性色av| 欧美片第1页| 成人在线视频区| 岛国av免费在线观看| av日韩中文| 精品一区二区三区中文字幕视频| 亚洲一区免费| 国产一区二区亚洲| 亚洲乱码视频| 性一交一乱一区二区洋洋av| 三级在线观看一区二区| 婷婷丁香综合| 欧美日韩国产在线观看网站| 欧美午夜不卡影院在线观看完整版免费| 在线日韩av| 久久精品国产大片免费观看| 国产剧情在线观看一区| 夜久久久久久| 国产精品成久久久久| 日韩在线观看一区二区| 日韩精品一区二区三区免费观影| 极品裸体白嫩激情啪啪国产精品| 欧美日韩国产免费观看视频| 国产精品蜜芽在线观看| 久久超碰99| 国产午夜一区| 国产女人18毛片水真多18精品| 亚洲精品极品| 亚洲精品看片| 少妇高潮一区二区三区99| 午夜在线精品| 蜜桃久久久久久| 视频一区中文字幕精品| 亚洲免费影视| 天堂成人国产精品一区| 蜜桃av一区二区在线观看| 亚洲狼人精品一区二区三区| 老司机精品久久| 亚洲毛片视频| 久久精品资源| 日韩国产一区| 91看片一区| 国产99在线| аⅴ资源天堂资源库在线| 国产欧美日本| 日本在线高清| 婷婷亚洲五月| 日韩一区二区三区精品| 日韩福利在线观看| 日本不卡高清| 久久精品二区亚洲w码| 国产成年精品| 狠狠躁少妇一区二区三区| 日韩影片在线观看| 美女视频免费精品| 夜夜嗨网站十八久久| 亚洲区欧美区| 欧美视频久久| 国产极品嫩模在线观看91精品| 91久久午夜| 综合激情视频| 国产伦精品一区二区三区千人斩| 国产欧美在线观看免费| 国产日韩一区| 久久精品五月| 亚洲高清av| 日韩影院精彩在线| 婷婷成人在线| 亚洲一区二区日韩| 嫩呦国产一区二区三区av| 尤物精品在线| 亚洲乱码视频| 免费在线视频一区| 久久女人天堂| 青草国产精品| 欧美日韩一区二区三区四区在线观看| 久久精品福利| 欧美jjzz| 免费看的黄色欧美网站| 日韩精品免费视频人成| 欧美国产不卡| 免费av一区| 日本视频一区二区| 亚洲精品88| 亚洲三级在线| 国产网站在线| 影音先锋久久精品| 精品一二三区| 亚洲免费观看| 久久99偷拍| 九色精品91| 国产亚洲一区二区三区不卡| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 午夜av成人| 欧美日韩一区二区三区不卡视频| 五月婷婷亚洲| 亚洲国产综合在线看不卡| 蜜臀av一区二区在线免费观看 | 欧美在线网站| 久久精品国产亚洲aⅴ| 国产亚洲激情| 国产精品国码视频| 国产精品普通话对白| 久久精品国产网站| 亚洲综合专区| 91精品一区二区三区综合在线爱| 国产私拍福利精品视频二区| 影音国产精品| 三级在线看中文字幕完整版| 日韩美女精品| 婷婷久久一区|