モバイル画像のアップロード、回転、圧縮のためのソリューション
はじめに
携帯電話で Web ページの入力タグを介して写真を撮影しアップロードすると、iPhone や一部の Samsung 製携帯電話など、一部の携帯電話では写真が 90 度回転するという問題が発生します。この問題は、これらの携帯電話を縦方向に撮影した場合にのみ発生し、横方向に撮影した写真は正常に表示されます。したがって、携帯電話のカメラ角度を取得して写真を回転させることで、この問題を解決できます。
方向
すべての写真にこのパラメータがあるわけではありませんが、携帯電話で撮影した写真にはこのパラメータがあります。
回転角度 | パラメータ値 |
---|---|
0° | 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('files'),img = document.getElementById('preview'),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, 'Orientation');}); 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('2d'); 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 サイトの他の関連記事を参照してください。

ホット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)

ホットトピック









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

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

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

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

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

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

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

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