JSはアップロードされた画像を圧縮します
アップロードされた画像のJS圧縮
/** * @Date: 2016/11/17 0017 * @Time: 10:14 * @Author: lxbin * * Created with JetBrains WebStorm. */ /** * http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/ * http://jafeney.com/2016/08/11/20160811-image-upload/ */ /** * 读取文件 * @param file 文件对象 * @return {Promise} */ function readFileAsync(file) { return new Promise((resolve, reject) => { const reader = new FileReader() reader.onload = e => resolve(readFile.target.result) reader.onerror = e => reject(new Error('Could not read file')) reader.readAsDataURL(file) }) } /** * 加载图片 * @param url 图片地址 * @return {Promise} */ function loadImageAsync(url) { return new Promise((resolve, reject) => { const image = new Image() image.onload = () => resolve(image) image.onerror = () => reject(new Error('Could not load image at ' + url)) image.src = url }) } /** * base64的图片dataUri转Blob * @param dataURI * @return {*} */ function dataURItoBlob(dataURI) { // convert base64 to raw binary data held in a string // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this var byteString = atob(dataURI.split(',')[1]); // separate out the mime component var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0] // write the bytes of the string to an ArrayBuffer var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } // write the ArrayBuffer to a blob, and you're done var blob = new Blob([ab], {type: mimeString}); return blob; // Old code // var bb = new BlobBuilder(); // bb.append(ab); // return bb.getBlob(mimeString); } /** * 图片转Blob * @param image 图片对象 * @param quality 图片质量(0到1之间) * @param scale 缩放比例(0到1之间) * @return {Promise} */ function imageToBlob(image, quality, scale) { return new Promise((resolve, reject) => { try { let canvas = document.createElement('canvas') canvas.width = image.naturalWidth * scale canvas.height = image.naturalHeight * scale while (canvas.width >= 3264 || canvas.height >= 2448) {//超过这个值base64无法生成,在IOS上 canvas.width = canvas.naturalWidth * scale canvas.height = canvas.naturalHeight * scale } let ctx = canvas.getContext('2d').drawImage(image, 0, 0, canvas.width, canvas.height) //方式一:低版本兼容性差些 //canvas.toBlob(function (blob) { // console.group('[Leo]file compress to blob') // console.log('文件类型 => ' + file.type) // console.log('文件大小 => ' + (file.size / 1024 / 1024).toFixed(2) + 'M') // console.log('blob质量 => ' + quality) // console.log('blob大小 => ' + (blob.size / 1024 / 1024).toFixed(2) + 'M') // console.groupEnd() // resolve(blob) //}, 'image/jpeg', quality) //方式二: var base64 = canvas.toDataURL('image/jpeg', quality); var blob = dataURItoBlob(base64); console.group('[Leo]file compress to blob') console.log('文件类型 => ' + file.type) console.log('文件大小 => ' + (file.size / 1024 / 1024).toFixed(2) + 'M') console.log('blob质量 => ' + quality) console.log('blob大小 => ' + (blob.size / 1024 / 1024).toFixed(2) + 'M') console.groupEnd() resolve(blob); } catch (e) { reject(new Error("Image could not convert to blob :" + e)) } }) } /** * Ajax上传 * @param uri 上传的Action地址 * @param file 文件对象 * @return {Promise} */ function uploadFile(uri, file) { return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest() if (xhr.upload) { xhr.upload.addEventListener("progress", (e) => {// 处理上传进度 if (e.lengthComputable) { let percent = (e.loaded / e.total * 100).toFixed(2) + '%' console.log("上传中(" + percent + ")"); //TODO:反馈到DOM里显示 } else { console.log('unable to compute'); } }, false) } xhr.onreadystatechange = (e) => {// 文件上传成功或是失败 if (xhr.readyState === 4) { if (xhr.status === 200) { resolve(xhr.responseText)// 上传成功 } else { reject(xhr.responseText)// 上传出错处理 } } } xhr.open("POST", uri, true)// 开始上传 let form = new FormData() form.append("filedata", file) xhr.send(form) }) } /** * 上传文件 * @param file 文件对象 * @param quality 图片质量(0到1之间) * @param scale 缩放比例(0到1之间) */ export default async function fileUpload(file, quality, scale) { try { let fileUrl = await readFileAsync(file) let image = await loadImageAsync(fileUrl) let blob = await imageToBlob(image, quality, scale) let upload = await uploadFile(blob) return upload } catch (e) { console.log('file upload failed') } }

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JS と Baidu Map を使用してマップ パン機能を実装する方法 Baidu Map は広く使用されている地図サービス プラットフォームで、Web 開発で地理情報、位置情報、その他の機能を表示するためによく使用されます。この記事では、JS と Baidu Map API を使用してマップ パン機能を実装する方法と、具体的なコード例を紹介します。 1. 準備 Baidu Map API を使用する前に、Baidu Map Open Platform (http://lbsyun.baidu.com/) で開発者アカウントを申請し、アプリケーションを作成する必要があります。作成完了

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

PHP と JS を使用して株のローソク足チャートを作成する方法。株のローソク足チャートは、株式市場で一般的なテクニカル分析グラフィックです。始値、終値、最高値、株価などのデータを描画することで、投資家が株式をより直観的に理解するのに役立ちます。株価の最低価格、価格変動。この記事では、PHP と JS を使用して株価のローソク足チャートを作成する方法を、具体的なコード例とともに説明します。 1. 準備 開始する前に、次の環境を準備する必要があります。 1. PHP を実行するサーバー 2. HTML5 および Canvas をサポートするブラウザー 3

株式分析に必須のツール: PHP および JS でローソク足チャートを描画する手順を学びます。特定のコード例が必要です。インターネットとテクノロジーの急速な発展に伴い、株式取引は多くの投資家にとって重要な方法の 1 つになりました。株価分析は投資家の意思決定の重要な部分であり、ローソク足チャートはテクニカル分析で広く使用されています。 PHP と JS を使用してローソク足チャートを描画する方法を学ぶと、投資家がより適切な意思決定を行うのに役立つ、より直感的な情報が得られます。ローソク足チャートとは、株価をローソク足の形で表示するテクニカルチャートです。株価を示しています

JS と Baidu Maps を使用してマップ クリック イベント処理を実装する方法の概要: Web 開発では、地理的位置と地理情報を表示するためにマップ関数を使用することが必要になることがよくあります。マップ上のクリック イベント処理は、マップ機能の一般的に使用される重要な部分です。この記事では、JS と Baidu Map API を使用して地図のクリック イベント処理機能を実装する方法と、具体的なコード例を紹介します。手順: Baidu Map の API ファイルをインポートします。まず、Baidu Map API のファイルを HTML ファイルにインポートします。これは、次のコードによって実現できます。

JS と Baidu Maps を使用してマップ ヒート マップ機能を実装する方法 はじめに: インターネットとモバイル デバイスの急速な発展に伴い、マップは一般的なアプリケーション シナリオになりました。視覚的な表示方法として、ヒート マップはデータの分布をより直観的に理解するのに役立ちます。この記事では、JS と Baidu Map API を使用してマップ ヒート マップ機能を実装する方法と、具体的なコード例を紹介します。準備作業: 開始する前に、次の項目を準備する必要があります: Baidu 開発者アカウント、アプリケーションの作成、対応する AP の取得

インターネット金融の急速な発展に伴い、株式投資を選択する人がますます増えています。株式取引では、ローソク足チャートは一般的に使用されるテクニカル分析手法であり、株価の変化傾向を示し、投資家がより正確な意思決定を行うのに役立ちます。この記事では、PHP と JS の開発スキルを紹介し、株価ローソク足チャートの描画方法を読者に理解してもらい、具体的なコード例を示します。 1. 株のローソク足チャートを理解する 株のローソク足チャートの描き方を紹介する前に、まずローソク足チャートとは何かを理解する必要があります。ローソク足チャートは日本人が開発した

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。
