目次
はじめに
方向
Rotation
圧縮
概要
ホームページ ウェブフロントエンド jsチュートリアル モバイル画像のアップロード、回転、圧縮のためのソリューション

モバイル画像のアップロード、回転、圧縮のためのソリューション

Jun 30, 2017 pm 01:21 PM
アップロード 圧縮 回転させる

はじめに

携帯電話で Web ページの入力タグを介して写真を撮影しアップロードすると、iPhone や一部の Samsung 製携帯電話など、一部の携帯電話では写真が 90 度回転するという問題が発生します。この問題は、これらの携帯電話を縦方向に撮影した場合にのみ発生し、横方向に撮影した写真は正常に表示されます。したがって、携帯電話のカメラ角度を取得して写真を回転させることで、この問題を解決できます。

方向

すべての写真にこのパラメータがあるわけではありませんが、携帯電話で撮影した写真にはこのパラメータがあります。

回転角度 パラメータ値
1
時計回り90° 6
反時計回り90° 8
180° 3

パラメータが 1 の場合、ディスプレイは通常です。その後、これらの水平ショットではディスプレイが通常です。つまり、Orientation = 1 の携帯電話では、垂直ショットのパラメータは 6 です。

Orientation パラメーターを取得したい場合は、exif.js ライブラリを通じて操作できます。 exif.js は多くの機能を備えており、非圧縮前では 30k と非常に大きく、モバイル ページの読み込みに大きな影響を与えます。そして、方向情報のみを取得する必要があるため、exif.js ライブラリから一部のコードを削除し、コードを数 KB に削減しました。

exif.js は Orientation を取得します:

EXIF.getData(file, function() {  var Orientation = EXIF.getTag(this, 'Orientation');});
ログイン後にコピー

file は、入力ファイル フォームによってアップロードされたファイルです。アップロードされたファイルは、fileReader.readAsDataURL(file) を通じてプレビューできます。これについてわからない場合は、次の点を確認してください。 HTML5 上級シリーズ: ファイルのアップロードとダウンロード

Rotation

Rotation では、rotate() メソッドを使用する必要があります。キャンバス。

ctx.rotate(angle);
ログイン後にコピー

rotate メソッドのパラメータは回転円弧です。角度はラジアンに変換する必要があります: 度 * Math.PI / 180

回転の中心点は、デフォルトではキャンバスの開始点、つまり (0, 0) にあります。回転の原理は以下の通りです。

モバイル画像のアップロード、回転、圧縮のためのソリューション

回転後、(0,0)点からdrawImage()を実行すると、描画位置は左図の90度回転後の位置になります。目に見える領域で。回転後、座標軸も回転しますので、表示領域に表示したい場合は、このときの始点である(0,0)点をy軸の逆方向に移動する必要があります。は (0, -y ) です。

同様に、-90度回転後の始点は(-x, 0)、180度回転後の始点は(-x, -y)となります。

圧縮

携帯電話で撮った写真は大きすぎ、base64でエンコードされた写真は元の写真よりも大きくなるため、アップロードする際には圧縮する必要があります。現在の携帯電話のピクセル数は非常に高く、撮影した写真の幅と高さは数千ピクセルなので、キャンバスを使用して写真をレンダリングすると比較的遅くなります。

そのため、最初のステップは、アップロードする写真の幅と高さを制限し、幅または高さが特定の範囲を超えているかどうかを判断し、幅と高さを均等に圧縮することです。

var ratio = width / height;if(imgWidth > imgHeight && imgWidth > xx){imgWidth = xx;imgHeight = Math.ceil(xx / ratio);}else if(imgWidth < imgHeight && imgHeight > yy){imgWidth = Math.ceil(yy * ratio);imgHeight = yy;}
ログイン後にコピー

2 番目のステップは、canvas.toDataURL() メソッドを使用して写真の品質を圧縮することです。

canvas.toDataURL("image/jpeg", 1);
ログイン後にコピー

toDataURL() メソッドは、画像表示を含むデータ URI を返します。 2 つのパラメータを使用します。最初のパラメータは画像形式で、デフォルトは image/png です。 2 番目のパラメータは圧縮品質です。指定された画像形式が image/jpeg または image/webp の場合、画質を 0 ~ 1 から選択できます。

概要

上記に基づいて、サンプル コードには簡略化された exif.js ライブラリ アドレスが含まれています: file-demo

主要なコア コードは次のとおりです:

<input type="file" id="files" ><img  src="/static/imghw/default1.png"  data-src="blank.gif"  class="lazy"   id="preview" alt="モバイル画像のアップロード、回転、圧縮のためのソリューション" >
<script src="small-exif.js?1.1.11"></script><script>var ipt = document.getElementById(&#39;files&#39;),img = document.getElementById(&#39;preview&#39;),Orientation = null;ipt.onchange = function () {var file = ipt.files[0],reader = new FileReader(),image = new Image();if(file){EXIF.getData(file, function() {  
            Orientation = EXIF.getTag(this, &#39;Orientation&#39;);});
            reader.onload = function (ev) {image.src = ev.target.result;
            image.onload = function () {var imgWidth = this.width,imgHeight = this.height;
            // 控制上传图片的宽高if(imgWidth > imgHeight && imgWidth > 750){imgWidth = 750;
            imgHeight = Math.ceil(750 * this.height / this.width);
            }else if(imgWidth < imgHeight && imgHeight > 1334){imgWidth = Math.ceil(1334 * this.width / this.height);
            imgHeight = 1334;
            }var canvas = document.createElement("canvas"),ctx = canvas.getContext(&#39;2d&#39;);
            canvas.width = imgWidth;canvas.height = imgHeight;
            if(Orientation && Orientation != 1){switch(Orientation){case 6:     
            // 旋转90度canvas.width = imgHeight;    canvas.height = imgWidth;    
            ctx.rotate(Math.PI / 2);
            // (0,-imgHeight) 从モバイル画像のアップロード、回転、圧縮のためのソリューション那里获得的起始点ctx.drawImage(this, 0, -imgHeight, imgWidth, imgHeight);
            break;case 3:     // 旋转180度ctx.rotate(Math.PI);    
            ctx.drawImage(this, -imgWidth, -imgHeight, imgWidth, imgHeight);break;case 8:     
            // 旋转-90度canvas.width = imgHeight;    canvas.height = imgWidth;    ctx.rotate(3 * Math.PI / 2);    
            ctx.drawImage(this, -imgWidth, 0, imgWidth, imgHeight);break;
            }}else{ctx.drawImage(this, 0, 0, imgWidth, imgHeight);}img.src = canvas.toDataURL("image/jpeg", 0.8);
            }}reader.readAsDataURL(file);
            }}</script>
ログイン後にコピー

以上がモバイル画像のアップロード、回転、圧縮のためのソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11 でメモリ圧縮を有効または無効にする方法 Windows 11 でメモリ圧縮を有効または無効にする方法 Sep 19, 2023 pm 11:33 PM

Windows 11 ではメモリ圧縮が行われているため、RAM の容量が限られている場合でもデバイスが停止します。この記事では、Windows11でメモリ圧縮を有効または無効にする方法を紹介します。メモリ圧縮とは何ですか?メモリ圧縮は、データを RAM に書き込む前に圧縮して、より多くの記憶領域を提供する機能です。もちろん、物理メモリに保存されるデータが増えると、システム動作が高速になり、全体的なパフォーマンスが向上します。この機能は Windows 11 ではデフォルトで有効になっていますが、何らかの理由でアクティブになっていない場合は、無効にするか再度有効にすることができます。 Windows 11 でメモリ圧縮を有効にするにはどうすればよいですか?検索バーをクリックし、「powershell」と入力して、

7-zipの最大圧縮率設定、7zipを最小まで圧縮する方法 7-zipの最大圧縮率設定、7zipを最小まで圧縮する方法 Jun 18, 2024 pm 06:12 PM

ダウンロード Web サイトからダウンロードした圧縮パッケージは、解凍後に元の圧縮パッケージよりも大きくなり、クラウド ディスクにアップロードすると、小さいものでは数十 MB の差が生じることがわかりました。有料のスペースは、ファイルが小さい場合は問題ありませんが、ファイルが多数ある場合、ストレージのコストが大幅に増加します。私はそれを具体的に勉強したので、必要に応じてそこから学ぶことができます。圧縮レベル: 9-極度の圧縮 辞書サイズ: 256 または 384、辞書が圧縮されるほど遅くなります。256MB より前では圧縮率に大きな違いがあり、384MB 以降では圧縮率に違いはありません。最大 273 パラメータ: f=BCJ2、テストおよび追加パラメータの圧縮率が高くなります

Kugou に独自の音楽をアップロードする簡単な手順 Kugou に独自の音楽をアップロードする簡単な手順 Mar 25, 2024 pm 10:56 PM

1. Kugou Music を開き、プロフィール写真をクリックします。 2. 右上隅にある設定アイコンをクリックします。 3. [音楽作品をアップロード]をクリックします。 4. [作品アップロード]をクリックします。 5. 曲を選択し、[次へ]をクリックします。 6. 最後に[アップロード]をクリックします。

QQ Musicに歌詞をアップロードする方法 QQ Musicに歌詞をアップロードする方法 Feb 23, 2024 pm 11:45 PM

デジタル時代の到来により、音楽プラットフォームは人々が音楽を入手する主な方法の 1 つになりました。しかし、曲を聴いていると歌詞がないことに気づき、非常に不安になることがあります。曲の内容や感情をより深く理解するために、曲を聴くときに歌詞が表示されることを望む人は多いでしょう。 QQ Music は中国最大の音楽プラットフォームの 1 つとして、ユーザーがより音楽を楽しみ、曲の含意を感じることができるように、ユーザーに歌詞をアップロードする機能も提供しています。 QQ Musicに歌詞をアップロードする方法を紹介します。初め

パソコンのアップロード速度を改善する方法 パソコンのアップロード速度を改善する方法 Jan 15, 2024 pm 06:51 PM

アップロード速度が非常に遅くなりますか?これは、多くの友人がコンピューターにアップロードするときに遭遇する問題だと思います。コンピューターを使用してファイルを転送するときにネットワークが不安定だと、アップロード速度が非常に遅くなります。では、ネットワークのアップロード速度を上げるにはどうすればよいでしょうか?以下では、エディターがコンピューターのアップロード速度が遅いという問題を解決する方法を説明します。ネットワーク速度に関しては、Web ページを開く速度、ダウンロード速度、アップロード速度も非常に重要であることは誰もが知っています。特に一部のユーザーはファイルをネットワーク ディスクにアップロードする必要があることが多いため、アップロード速度が速いと間違いなく節約になります。お金がたくさんあります。時間がなくなりました。アップロード速度が遅い場合はどうすればよいですか?以下では、エディターがコンピューターのアップロード速度が遅い場合の対処方法についての写真とテキストを提供します。コンピューターのアップロード速度が遅いという問題を解決するには、「スタート」-「ファイル名を指定して実行」または「Window キー」をクリックします。

Word の画像を回転する方法 Word の画像を回転する方法 Mar 19, 2024 pm 06:16 PM

オフィスソフトのWordを使って文書を作成する場合、文書内に写真などを挿入することが多いですが、美しいレイアウトを実現するためには、写真に特殊なレイアウトを施す必要があり、その中に回転処理などがあります。ただし、職場で Word オフィス ソフトウェアに触れたばかりの新参者の中には、Word 文書内の画像を処理できない場合があります。以下では、Word で画像を回転する方法を説明します。 1. まず、Word 文書を開き、メニュー バーの [画像の挿入] ボタンをクリックして、操作とデモンストレーションを容易にするためにコンピュータにランダムな画像を挿入します。 2. 画像を回転したい場合は、次の操作を行う必要があります。

Golang の画質圧縮を実現する方法 Golang の画質圧縮を実現する方法 Aug 17, 2023 pm 10:28 PM

画質圧縮を実現する Golang の方法 インターネットの急速な発展に伴い、画像は人々がオンラインで情報を伝達し伝達するための重要なメディアの 1 つになりました。ただし、高解像度の画像は多くのストレージ容量を占有するだけでなく、ネットワーク送信時の読み込み時間も長くなり、ユーザー エクスペリエンスに一定の影響を与えます。したがって、実際のアプリケーションでは、画像圧縮は非常に意味のある作業となります。この記事ではGolangを使って画質を圧縮する方法を紹介します。まず、Gola をインポートする必要があります

win10 画面録画ファイルサイズを減らすためのヒント win10 画面録画ファイルサイズを減らすためのヒント Jan 04, 2024 pm 12:05 PM

多くの友人が事務作業で画面を録画したり、ファイルを転送したりする必要がありますが、ファイルが大きすぎる問題が原因で多くのトラブルが発生することがあります。以下にファイルが大きすぎる問題の解決策を示します。 win10 画面録画ファイルが大きすぎる場合の対処方法: 1. ソフトウェア Format Factory をダウンロードしてファイルを圧縮します。ダウンロードアドレス >> 2. メインページに入り、「Video-MP4」オプションをクリックします。 3. 変換形式ページで「ファイルの追加」をクリックし、圧縮するMP4ファイルを選択します。 4. ページ上の「出力構成」をクリックして、出力品質に従ってファイルを圧縮します。 5. ドロップダウン構成リストから「低品質とサイズ」を選択し、「OK」をクリックします。 6. 「OK」をクリックしてビデオファイルのインポートを完了します。 7. 「開始」をクリックして変換を開始します。 8. 完了したら、次のことができます。

See all articles