這是沒有上傳前的圖片
這是上傳後的圖片
運用exif.js解析的圖片,不知道什麼原因,上傳的png格式的不知道為什麼是黑色背景
下面直接貼程式碼吧
<code>/** * 上传多张图片 * @method uploadImg * @params url:上传图片请求的服务器端的文件的地址, * @params container:图片上传之后渲染到哪个父盒子, * @params maxCount:最多可上传的数目, * @params maxMb:上传的大小MB * @params fileInput:上传图片的文件域 * @params scale:图片的缩放比例 大小 * @params name:参数名称 * @params success:上传成功之后执行的回调函数 * @params error:上传失败之后执行的回调函数 * @params warn:不符合上传条件时执行的回调函数 * @return 元素对象.uploadImg(Objext) */ (function($){ $.fn.extend({ uploadImg:function(opt){ var up=new UploadImg(opt,this); } }); function UploadImg(option,self){ var _defaults={ url:"", container:self, maxCount:3, maxMb:2, fileInput:$(self).find(".fileImg"), scale:0.8, name:"img", success:function(data,idx){ }, error:function(msg){ alertBox(msg,1,"关 闭","",cancelAlert); }, warn:function(msg){ alertBox(msg,1,"关 闭","",cancelAlert); } }; this.opt=$.extend({},_defaults,option); this.init(self); } UploadImg.prototype={ init:function(self){ var _this=this; var liIndex=0; // 给文件域绑定事件 _this.opt.fileInput.on('change',function(){ var files=this.files?this.files:null, _tar=files[0], maxSize=_this.opt.maxMb*1024*1024, reg=/\.(jpg)|(jpeg)|(gif)|(png)$/i, err="", html=""; if(!(reg.test(_tar.name))){ err="请上传jpg/jpeg/gif/png格式的图片"; }else{ if(_tar.size>maxSize){ err="图片尺寸超出限制,请上传低于"+_this.opt.maxMb+"M的图片"; } } if(err){ _this.opt.warn && _this.opt.warn(err); return; } liIndex++; html='<li class="upload-img upload-loading">' +'<img src="" alt="exif.js 載入出來的PNG圖片背景是黑色的?" >' +'<a href="javascript:void(0)" class="upload_delete" title="删除"></a>' +'</li>'; $(html).prependTo($(_this.opt.container)); _this.getCount(liIndex); // 上传图片 _this.zipImg({ files:files, scale:_this.opt.scale, callback:function(tar){ if(tar.constructor!='Array'){ tar=[tar]; } _this.submit(tar,liIndex,self); } }) }) // 关闭 $(_this.opt.container).on('click','.upload_delete',function(){ liIndex-=1; $(this).parents('li.upload-img').remove(); _this.getCount(liIndex); }) }, //压缩图片方法 zipImg: function(cfg){ /* * cfg.files input对象触发onchange时候的files * cfg.scale 压缩比例 * cfg.callback 压缩成功后的回调 */ var _this = this; var options = cfg; [].forEach.call(options.files, function(v, k){ var fr = new FileReader(); fr.onload= function(e) { var oExif = EXIF.readFromBinaryFile(new BinaryFile(e.target.result)) || {}; var $img = document.createElement('img'); $img.onload = function(){ _this.fixDirect().fix($img, oExif, options.callback,options.scale); }; if(typeof(window.URL) != 'undefined'){ $img.src = window.URL.createObjectURL(v); }else{ $img.src = e.target.result; } }; //fr.readAsDataURL(v); fr.readAsBinaryString(v); }); }, //调整图片方向 fixDirect: function(){ var r = {}; r.fix = function(img, a, callback,scale) { var n = img.naturalHeight, i = img.naturalWidth, c = 1024, o = document.createElement("canvas"), s = o.getContext("2d"); a = a || {}; //o.width = o.height = c; //debugger; if(n > c || i > c){ o.width = o.height = c; }else{ o.width = i; o.height = n; } a.Orientation = a.Orientation || 1; r.detectSubSampling(img) && (i /= 2, n /= 2); var d, h; i > n ? (d = c, h = Math.ceil(n / i * c)) : (h = c, d = Math.ceil(i / n * c)); // var g = c / 2, var g = Math.max(o.width,o.height)/2, l = document.createElement("canvas"); if(n > c || i > c){ l.width = g, l.height = g; }else{ l.width = i; l.height = n; d = i; h =n; } //l.width = g, l.height = g; var m = l.getContext("2d"), u = r.detect(img, n) || 1; s.save(); r.transformCoordinate(o, d, h, a.Orientation); var isUC = navigator.userAgent.match(/UCBrowser[\/]?([\d.]+)/i); if (isUC && $.os.android){ s.drawImage(img, 0, 0, d, h); }else{ for (var f = g * d / i, w = g * h / n / u, I = 0, b = 0; n > I; ) { for (var x = 0, C = 0; i > x; ) m.clearRect(0, 0, g, g), m.drawImage(img, -x, -I), s.drawImage(l, 0, 0, g, g, C, b, f, w), x += g, C += f; I += g, b += w } } s.restore(); a.Orientation = 1; img = document.createElement("img"); img.onload = function(){ a.PixelXDimension = img.width; a.PixelYDimension = img.height; //e(img, a); }; callback && callback(o.toDataURL("image/jpeg", scale).substring(22));//压缩图片 }; r.detect = function(img, a) { var e = document.createElement("canvas"); e.width = 1; e.height = a; var r = e.getContext("2d"); r.drawImage(img, 0, 0); for(var n = r.getImageData(0, 0, 1, a).data, i = 0, c = a, o = a; o > i; ) { var s = n[4 * (o - 1) + 3]; 0 === s ? c = o : i = o, o = c + i >> 1 } var d = o / a; return 0 === d ? 1 : d }; r.detectSubSampling = function(img) { var a = img.naturalWidth, e = img.naturalHeight; if (a * e > 1048576) { var r = document.createElement("canvas"); r.width = r.height = 1; var n = r.getContext("2d"); return n.drawImage(img, -a + 1, 0), 0 === n.getImageData(0, 0, 1, 1).data[3] } return !1; }; r.transformCoordinate = function(img, a, e, r) { switch (r) { case 5: case 6: case 7: case 8: img.width = e, img.height = a; break; default: img.width = a, img.height = e } var n = img.getContext("2d"); switch (r) { case 2: n.translate(a, 0), n.scale(-1, 1); break; case 3: n.translate(a, e), n.rotate(Math.PI); break; case 4: n.translate(0, e), n.scale(1, -1); break; case 5: n.rotate(.5 * Math.PI), n.scale(1, -1); break; case 6: n.rotate(.5 * Math.PI), n.translate(0, -e); break; case 7: n.rotate(.5 * Math.PI), n.translate(a, -e), n.scale(-1, 1); break; case 8: n.rotate(-.5 * Math.PI), n.translate(-a, 0) } }; return r; }, getCount:function(idx){ var _this=this, size=$(_this.opt.container).find('li.upload-img').size(), $uploadLi=$(_this.opt.fileInput).parents("li"); if(idx>=_this.opt.maxCount){ $uploadLi.hide(); }else{ $uploadLi.show(); } }, submit:function(files,idx,t){ var _this=this, files=files[0], param={}, url=_this.opt.url; param[_this.opt.name]=files; $.ajax({ url:url, type:"post", data:param, success:function(data){ data=JSON.parse(data); _this.opt.success && _this.opt.success(data,idx); $(t).find("li").eq(0).removeClass('upload-loading').find('img').attr('src',data.url); }, error:function(data){ _this.opt.error && _this.opt.error(data.msg); } }) } } })(jQuery);</code>
壓縮圖片中用到的EXIF就在那裡處理圖片的,不知道怎麼處理上傳後圖片的PNG格式的圖片,背景是黑的,求大神解救! ! !
也可以直接下載運行,主要是遇到的透明的png合成的時候是有黑色背景!目的是去除黑色背景! !
<code>git clone https://github.com/Shoestrong/uploadimg.git</code>
補充一點:剛發現的,上傳png的時候尺寸也有問題,順便解決一下! !

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。