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

您的位置:首頁技術(shù)文章
文章詳情頁

基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

瀏覽:249日期:2024-09-30 16:11:51

用django_micro搭建的,給圖片加文字水印的前端+后端功能開發(fā);

大體功能是:輸入水印的文字,選擇要加水印的圖片,最后生成加好水印的圖片。

可在一頁中顯示多個(gè)加好水印的圖片,且可點(diǎn)擊顯示或隱藏圖片的縮略圖。實(shí)現(xiàn)效果如下:

基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

基于django micro搭建網(wǎng)站實(shí)現(xiàn)加水印功能

代碼如下

from django_micro import route, run, configurefrom django.http import HttpRequest, HttpResponsefrom dominate.document import documentimport dominate.tags as domfrom wand.drawing import Drawing # 加水印用from wand.image import Image # 加水印用import base64 # 圖片轉(zhuǎn)字符串用 configure({’DEBUG’:True}) # 一些元素的clsCENTERFRAME = 'flex flex-col items-center justify-center bg-teal-200 h-screen'UPLOAD_FORM_ATTRIS ={ 'class':'flex flex-col justify-center', 'ic-post-to': '/file', 'ic-target': '#result_item', 'ic-replace-target': 'true', 'enctype': 'multipart/form-data'}CARD1 = 'flex flex-col bg-green-400 shadow-xl p-1 rounded-lg w-80 h-auto'TEXT_INPUT = 'shadow border rounded m-1 p-1 text-base text-center font-thin'CARD2 = 'flex flex-col bg-white shadow-xl p-2 rounded-lg w-80 h-80'DASHED_BOX = 'flex flex-col items-center justify-center border-dashed border-2 border-gray-200 h-full'UPLOAD_ICON = 'fas fa-file-upload text-gray-300 font-medium text-6xl'UPLOAD_BUTTON = 'flex justify-center bg-green-400 px-3 py-2 mt-4 text-white rounded shadow'RESULT_CONTAINER = 'flex flex-col bg-white items-center'RESULT_ITEM = 'flex flex-col justify-center bg-white p-2 border-t border-gray-200 w-64'TOGGLE_TEXT_ATTRIS = { # 這個(gè)常量后來沒用 'ic-action':'slideToggle', # 'ic-target':'#toggle_img', # 以ID定位,只能選擇第一個(gè)元素 'ic-target':'figure' # 以元素類型定位,會(huì)對(duì)所有同類元素進(jìn)行操作} # 為了寫head部分的引入方便,寫個(gè)link_函數(shù);下面script_函數(shù)類似def link_(lk): return dom.link(rel='stylesheet',type='text/css',href=lk) def script_(s): return dom.script(src=s) def page(): doc = document() with doc.head: link_('https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css') # tailwind link_('https://extra-uru1z3cxu.now.sh/css/extra.css') # 額外寫的擴(kuò)展庫 link_('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.css') # 為了使用font-awesome的圖標(biāo) script_('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js') # jquery script_('http://intercoolerjs.org/release/intercooler-1.2.2.js') # intercooler with doc.body: with dom.div(cls=CENTERFRAME) as CenterFrame: with dom.form(UPLOAD_FORM_ATTRIS) as UploadForm:# 輸入水印文字區(qū)with dom.div(cls=CARD1) as Card1: dom.p('Write down your mark here',cls='text-base font-thin text-white' ) dom.input(cls=TEXT_INPUT,id='wm_text',type='text',name='mark_text',placeholder='your watermark text')# 上傳圖片區(qū)with dom.div(cls=CARD2) as Card2: with dom.div(cls=DASHED_BOX): dom.i(cls=UPLOAD_ICON,onclick=’’’$(’#fileupload’).click()’’’) dom.p('Find File', id='show_info', cls='text-gray-500 mt-4') dom.button('Upload', cls=UPLOAD_BUTTON) dom.input(cls='hidden', type='file', id='fileupload',name='ori_img', onchange=’’’$(’#show_info’).text(this.value.split('').pop(-1))’’’) # 生成水印圖片區(qū) with dom.div(cls=RESULT_CONTAINER) as ResultContainer:dom.span(id='result_item') return doc.render() def item(result_file_path): filename = result_file_path.split(’/’,1)[-1].split(’.’)[0] print(’filename:’,filename) # 處理圖片,轉(zhuǎn)成字符串 with open(result_file_path, 'rb') as imageFile: img_str = base64.b64encode(imageFile.read()) with dom.div(cls=RESULT_ITEM) as ResultItem: with dom.a( { 'ic-action':'slideToggle', 'ic-target':f'#{filename}' }) as ToggleText: dom.p(filename, cls='text-sm font-thin text-center text-gray-800') with dom.figure(cls='hidden',id=filename): # id中不能帶’.’(點(diǎn)) dom.img(title='data src',alt='', src = 'data:image/jpeg;base64,' + str(img_str,’utf-8’) ) # 轉(zhuǎn)str時(shí)要加’utf-8’,否則不能去掉b’ return dom.span(id='result_item').render() + ResultItem.render() @route(’’)def index(request: HttpRequest): return HttpResponse(page()) @route(’file’)def filehandler(request:HttpRequest): ori_img = request.FILES.get(’ori_img’) mark_text = request.POST.get(’mark_text’) # 得用request.POST,因?yàn)閒orm提交是用POST方式 print(’mark_text:’,mark_text) result_file_path = ’output/Toggle_’+ori_img.name # 打水印后的文件保存路徑 with Image(file=ori_img) as img: # 先保存原始圖片 img.save(filename=’userupload/’ + ori_img.name) # 畫圖,把字畫在原圖上 with Drawing() as ctx: ctx.font_family = ’Times New Roman, Nimbus Roman No9’ # ctx.font_size = 50 ctx.font_size = int(img.height) * 0.1 ctx.text_kerning = 20 # 字間距 ctx.fill_color = ’grey’ # ctx.opacity = 0.9 # 不透明性 img.annotate(mark_text, ctx, left=int(img.width) * 0.1, baseline=int(img.height) * 0.45) img.save(filename=result_file_path) return HttpResponse(item(result_file_path)) app = run()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩啪啪电影网| 99久久99视频只有精品| 日韩一区自拍| www.九色在线| 黄毛片在线观看| 人人草在线视频| 亚洲一区日本| 久久国产免费看| 国产亚洲精品久久久久婷婷瑜伽| 老鸭窝一区二区久久精品| 国产乱人伦丫前精品视频| 日韩国产一区二| 欧美永久精品| 国产精品玖玖玖在线资源| 色婷婷色综合| 亚洲综合小说| 国产一区二区三区视频在线| 国产99亚洲| 日本视频一区二区| av资源新版天堂在线| 日韩欧美综合| 午夜亚洲精品| 国产欧美日韩影院| 国产不卡一区| 亚洲黄页一区| 国产精品亚洲成在人线| 日韩国产欧美| 日韩一区二区三区在线看| 久久精品免视看国产成人| 美女精品在线观看| 日韩不卡一区二区三区| 麻豆国产精品视频| 美国欧美日韩国产在线播放| 精品视频高潮| 久热精品在线| 国产一区二区三区探花| 另类av一区二区| 欧美精品国产| 欧美精品一区二区久久| 7m精品国产导航在线| 欧美女激情福利| 一区二区三区四区日本视频| 免播放器亚洲| 精品日产乱码久久久久久仙踪林| 国产毛片久久| 国产 日韩 欧美一区| 国产情侣一区在线| 国产精品试看| 999国产精品永久免费视频app| 国产精品多人| 日韩一区二区三区免费视频| 亚洲午夜一级| 亚洲综合在线电影| 7m精品国产导航在线| 久久aⅴ国产紧身牛仔裤| 久久久国产亚洲精品| 久久久国产精品网站| 久久精品72免费观看| 婷婷精品在线| 在线免费观看亚洲| 在线一区欧美| 99国产成+人+综合+亚洲欧美| 新版的欧美在线视频| 在线看片国产福利你懂的| 国产精品一区二区99| 91国内精品| 国产亚洲欧美日韩在线观看一区二区| 久久国产精品毛片| 日韩精品一区二区三区免费观影 | 偷拍亚洲精品| 亚洲精品激情| 天堂久久一区| 91精品国产经典在线观看| 日韩超碰人人爽人人做人人添| 日本视频一区二区| 欧美韩一区二区| 蜜桃视频在线网站| 国内激情久久| 伊人久久一区| 97精品资源在线观看| 国产精品igao视频网网址不卡日韩 | 国产女优一区| 91国内精品| 在线看片福利| 亚洲一区二区三区久久久| 久久wwww| 欧美日韩在线网站| 亚洲精品福利| 六月丁香综合在线视频| 电影亚洲精品噜噜在线观看 | 麻豆一区二区在线| 成人免费电影网址| 视频一区视频二区中文| 欧美日韩在线精品一区二区三区激情综合 | 日韩精品午夜视频| 水蜜桃久久夜色精品一区| 亚洲一区中文| 免费在线亚洲欧美| 欧美日韩国产一区精品一区| 人人爱人人干婷婷丁香亚洲| 免费在线观看一区| 老牛国产精品一区的观看方式| 久久激情综合网| 99亚洲精品| 97视频热人人精品免费| 亚洲涩涩av| 日韩不卡在线| 国产精品综合| 蜜桃视频在线观看一区| 国产成年精品| 久久国产乱子精品免费女| 免费欧美日韩| 国产99久久久国产精品成人免费| 国产精品videossex| 日本一区二区三区视频在线看| 9999国产精品| 国产日韩三级| 最新国产精品视频| 久久xxxx| 一区在线视频观看| 久久久久欧美精品| 91欧美在线| 久久香蕉精品香蕉| 国产精品99久久免费观看| 亚洲专区视频| 日韩精品一二三| 久久亚洲图片| 日韩精品社区| 国产日韩精品视频一区二区三区| 亚洲制服欧美另类| 亚洲一区中文| 一区二区三区四区日韩| 综合一区二区三区| 综合国产视频| 亚洲精品国产精品粉嫩| 午夜精品福利影院| 清纯唯美亚洲综合一区| 欧美一区在线观看视频| 欧美精品中文字幕亚洲专区| 国产精品国码视频| 国产成人精品亚洲线观看| 国产日韩电影| 一区视频在线| 欧美日韩一区二区三区在线电影| 欧美日韩1区2区3区| 国产日韩高清一区二区三区在线 | 1024精品一区二区三区| 尤物在线精品| 欧美日韩视频免费看| 久久中文字幕一区二区三区| 精品国产一区二区三区av片| 亚洲爱爱视频| 蜜桃视频一区二区| 国产日韩欧美一区| 日韩精品一卡| 91精品国产自产精品男人的天堂| 久久一区视频| 国产精品毛片一区二区三区| 久久国产视频网| av中文字幕在线观看第一页| 爽好多水快深点欧美视频| 美女视频一区在线观看| 91精品99| 国产精品色在线网站| 蜜桃国内精品久久久久软件9| 日韩不卡手机在线v区| 成人羞羞视频在线看网址| 综合激情五月婷婷| 欧洲av一区二区| 久久国内精品视频| 亚洲综合另类| 夜鲁夜鲁夜鲁视频在线播放| 亚洲另类黄色| 欧美肉体xxxx裸体137大胆| 亚洲v天堂v手机在线| 亚洲国内精品| 国产成人精品一区二区三区视频 | 国产视频久久| 亚洲91视频| 精品久久精品| 日本视频中文字幕一区二区三区| 91精品国产调教在线观看| 久久99久久人婷婷精品综合| 在线国产日韩| 99久久激情| 韩国久久久久久| 精品精品国产三级a∨在线| 国产亚洲电影| 日韩高清在线不卡| 美美哒免费高清在线观看视频一区二区| 最近高清中文在线字幕在线观看1| 91国内精品| 国产区精品区| 欧美成人一二区| 久久亚洲资源中文字| 国产精品久久久久av蜜臀| 国产免费av国片精品草莓男男| 日韩av一二三| 欧美激情视频一区二区三区免费| 日本色综合中文字幕|