検索
ホームページウェブフロントエンドhtmlチュートリアルFlash を使用しない画像のトリミング -- HTML5 中級上級_html/css_WEB-ITnose

はじめに

画像のトリミングとアップロードは、ユーザーエクスペリエンスに非常に適した機能であるだけでなく、特定の画像サイズを統一し、Webサイトのレイアウトを最適化し、一石二鳥の効果もあります。

要件はシンプルで、ブラウザーで画像を切り取ってサーバーにアップロードするだけです。

私が最初に考えた方法は、画像とトリミングパラメータ(x、y、スケール、回転)をサーバーにアップロードすることで、サーバーが画像処理を行うので、とても簡単です。

しかし、これは開発のトレンドに沿っていません: フロントエンドでできる処理はフロントエンドにやらせます。

トレンドに妥協した結果、フロントエンドはますます複雑になります。

最初は、ブラウザが画像を読み取って生成できるとは思いませんでした。考えてみてください。「クリックしてコピー」などの単純な機能を実行するには、Flash ブラウザを使用する必要があり、権限はそれほど大きくありません。

画像をローカルで処理する限り、基本的には Flash を使用します。コピーするだけです。API はありません。画像を変更できても、アップロード パスを変更する方法がわかりません。さらに重要なのは、私は Flash について何も知りません。

幸いなことに、私たちの Web サイトは IE9 以下のブラウザーを完全に放棄し、最新の HTML5 ブラウザーとのみ互換性があります。 (Opera や Microsoft でさえ Webkit カーネル路線をたどり始めており、Chrome を追随する傾向にあります。) 私は HTML5 に期待するしかないので、少し調べてみたところ、次のプロセスが実現可能であることがわかりました。

st=>start: 原图片 File 对象e=>end: 上传裁剪后的Blob对象op=>operation: 初始化Cropper 图片Base64预览op1=>operation: 根据Cropper裁剪参数绘制Canvas(Base64)op2=>operation: Base64转Blob对象st->op->op1->op2->e

各リンクについては、以下で詳しく説明します。

元の画像 File オブジェクトを取得します

各画像ファイルの処理の始まりは onchange イベントによって開始されます

<script>    function handler(e){        var originPhoto = e.target.files[0]; // IE10+ 单文件上传取第一个        window.originFileType = originPhoto.type; //暂存图片类型        window.originFileName = originPhoto.name; //暂存图片名称        ...    }</script><input type="file" name="demo" onchange='handler(event)' accept="image/*" ><img  id="preview" alt="Flash を使用しない画像のトリミング -- HTML5 中級上級_html/css_WEB-ITnose" ><button onclick="cropAndUpload()">确定并上传</button>

Cropper を初期化します

ここでは非常に使いやすいライブラリ Cropper.js を紹介します

https:/ /github .com/fengyuanchen/cropper

マスクの生成、トリミングパラメータの取得、キャンバスの出力...そしてそれは非常に軽量で、圧縮された CSS コードと JS コードはわずか 30 KB です。 JQuery をベースにしているため、JQuery の導入は少し複雑になる可能性があります。しかし、現在 JQuery を使用していない Web サイトはどれでしょうか?

IE9+と互換性があり、優れたモバイルエクスペリエンスを備え、タッチズームやドラッグに応答できます。以下は Android 4.4 のネイティブブラウザでのプレビュー画像です

function handler(event){    ...    var URL = window.URL || window.webkitURL , originPhotoURL;    originPhotoURL = URL.createObjectURL(originPhoto);   //Base64    $('#preview').cropper({        aspectRatio: 1 / 1,                 // 固定裁剪比例1:1,裁剪后的图片为正方形    }).cropper('replace', originPhotoURL);  // 动态设置图片预览}

Drawing Canvas

Cropper.js には、Canvas を生成するメソッド getCroppedCanvas が用意されており、生成されるキャンバスのサイズを指定できます。

または、getData に基づいてトリミング情報 (回転とスケーリングを含む) を取得し、ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) を使用して手動で描画します。後者の方が自由ですが、既製の方法があるので、それを使用してください。

function cropAndUpload(){    // 此处注意,生成的Canvas长宽比应与之前规定的裁剪比例一致    // 否则生成的图片会有失真    var size = {        width:100,        height:100    }    var croppedCanvas = $('#preview').cropper("getCroppedCanvas",size);  // 生成 canvas 对象    var croppedCanvasUrl = croppedCanvas.toDataURL(originFileType); // Base64    ...}

なお、幅と高さの値を固定値に設定することは推奨されません。クロップ フレームのサイズは 100 100 (500 500 など) を超える場合がありますが、実際に生成される画像は 100 100 です。この結果、500 500 の高解像度画像が 100 100 の歪んだ画像に直接圧縮されます。同様に、クロップ ボックスが 100 100 より小さい場合、生成された画像はぼやけます。

Base64 から Blob オブジェクトへ

文字列をバイナリに変換しますか? (フロントエンドは元々ページを作成するものでしたが、ファイル操作も行うようになりました。HTML5の登場以降、ブラウザもオペレーティングシステムとみなせるようになりました) 公式のDataURLtoBlobメソッドはないので、以下のように書くことしかできません。変換は非常に簡単です。ファイル タイプを逆アセンブルし、文字データを 16 進データに変換して配列に格納し、そのデータで Blob オブジェクトを初期化します。

function dataURLtoBlob(dataurl) {    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);    while(n--){        u8arr[n] = bstr.charCodeAt(n);    }    return new Blob([u8arr], {type:mime});}function cropAndUpload(){    ...    var croppedBlob = dataURLtoBlob(croppedCanvasUrl);    croppedBlob.name = originFileName; // Blob对象没有name    // Upload(croppedBlob);}

これで、この BLOB オブジェクトを FileObject のように処理できるようになりました。

実は、最新の HTML5 標準では HTMLCanvasElement.toBlob(callback, mimeType,quality) をサポートしています

croppedCanvas.toBlob(function(croppedBlob){    // Upload(croppedBlob);},originFileType)

遠回りしましたが、それでも勉強になりました。

MaxLeap チーム_UX メンバーの原著者: John Wang

元のリンク: https://blog.maxleap.cn/archives/705

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLのブール属性とは何ですか?いくつかの例を挙げてください。HTMLのブール属性とは何ですか?いくつかの例を挙げてください。Apr 25, 2025 am 12:01 AM

ブール属性は、値なしでアクティブ化されるHTMLの特別な属性です。 1.ブール属性は、無効化された入力ボックスを無効にするなど、存在するかどうかによって、要素の動作を制御します。 2.彼らの実用的な原則は、ブラウザが異なっているときに属性の存在に応じて要素の動作を変更することです。 3.基本的な使用法は、属性を直接追加することであり、高度な使用法はJavaScriptを介して動的に制御できます。 4.一般的な間違いは、値を設定する必要があると誤って考えており、正しい執筆方法は簡潔にする必要があります。 5.ベストプラクティスは、コードを簡潔に保ち、ブールのプロパティを合理的に使用して、Webページのパフォーマンスとユーザーエクスペリエンスを最適化することです。

HTMLコードをどのように検証できますか?HTMLコードをどのように検証できますか?Apr 24, 2025 am 12:04 AM

HTMLコードは、オンラインバリデーター、統合ツール、自動化されたプロセスを使用するとクリーンになります。 1)w3cmarkupvalidationserviceを使用して、HTMLコードをオンラインで確認します。 2)リアルタイム検証のためにVisualStudiocodeにhtmlhint拡張機能をインストールして構成します。 3)HTMLTIDYを使用して、建設プロセスでHTMLファイルを自動的に検証およびクリーニングします。

HTML対CSSおよびJavaScript:Webテクノロジーの比較HTML対CSSおよびJavaScript:Webテクノロジーの比較Apr 23, 2025 am 12:05 AM

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

マークアップ言語としてのHTML:その機能と目的マークアップ言語としてのHTML:その機能と目的Apr 22, 2025 am 12:02 AM

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

HTML、CSS、およびJavaScriptの未来:Web開発動向HTML、CSS、およびJavaScriptの未来:Web開発動向Apr 19, 2025 am 12:02 AM

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1

メモ帳++7.3.1

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