クリックイメージ反転効果を実現するJavaScript

クリックイメージ反転効果を実現するJavaScript

最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いているときに問題が発生しました。顧客が写真をアップロードしたり、写真を撮って直接アップロードしたりすると、一部の写真が90度反転することがあります。そのため、顧客にボタンを提供して、写真を自分で回転できるようにする必要があります。効果はおおよそ次のようになります。

図1. 通常の画像アップロード

図2. 画像は左に回転している

図3. 右に回転した画像

上記は画像回転機能です

それではコード部分から始めましょう。

ここで私は方法を採用しました。現在の画像形式は base64 です。他の形式に遭遇しても問題ありません。最終的な効果を実現するには、画像オブジェクトに変換する必要があるためです。

/**
     * 画像の回転* @param direction 回転の方向*/
    回転(方向){
      const img = 新しい画像()
      // ここでの考え方は、画像を描画ボードにマッピングして画像を再描画することです。そのため、描画ボードとして機能するキャンバス オブジェクトを作成する必要があります。const canvas = document.createElement('canvas')
      // base64 変換画像オブジェクト img.src = this.uploadImage
      // 他の操作を実行する前に、必ず base64 をイメージ オブジェクトに変換してください。著者はここでミスを犯しています。onload メソッドは、他の操作を実行する前にイメージを読み込みます。イメージがファイル パスである場合、クロスドメイン呼び出しの影響はより明白です。img.onload = () => {
        // img 要素が非表示になると、img の高さと幅を取得できなくなります。そうしないとエラーが発生します。const height = img.height
        定数幅 = img.width
        // 回転角度はパラメータとしてラジアンで指定します。const ctx = canvas.getContext('2d')
        if (方向 === '右') {
          キャンバス.幅 = 高さ
          キャンバスの高さ = 幅
          ctx.rotate(90 * Math.PI / 180)
          ctx.drawImage(画像, 0, 0, 幅, -高さ)
        } それ以外 {
          キャンバス.幅 = 高さ
          キャンバスの高さ = 幅
          ctx.rotate(-90 * Math.PI / 180)
          ctx.drawImage(画像、0、0、-幅、高さ)
        }
        // 回転した画像をbase64に戻す
        this.uploadImage = this.getBase64Image(img, キャンバス)
      }
    },
    /**
    * 画像ファイルをbase64に変換する
    */
    getBase64Image (画像、キャンバス) {
      const ctx = キャンバス.getContext('2d')
      ctx.drawImage(画像、0、0、画像の幅、画像の高さ)
      定数 ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
      canvas.toDataURL('image/' + ext) を返します。
    }

注意:イメージがクロスドメインから取得された場合、キャンバスを base64 に戻すときに問題が発生する可能性があります。この場合、イメージを取得するためにプロキシを有効にする必要がある場合があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JSはマウスに従って画像を3次元的に反転する方法を実装します
  • JavaScript で簡単な画像反転を実装する方法
  • ボタン制御による画像の360度反転効果を実現するjsメソッド
  • JS コントロール画像反転サンプルコード (Firefox、Chrome と互換性あり)

<<:  特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

>>:  docker に基づいて nginxssl 設定を開始する

推薦する

JavaScriptにおけるこれの深い理解

Jsでのこれの深い理解JavaScriptスコープはstatic scopeスコープですが、 Jsの...

CSS導入方法4つのまとめ(共有)

1. インライン参照:ラベルに直接使用されるが、メンテナンスコストが高い スタイル='フォ...

Unicode の一般的な文字の概要

初期のコンピューターのほとんどは ASCII 文字しか使用できませんでしたが、その後、主要な西洋のア...

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

MySQL 自動インクリメント ID のオーバーサイズ問題のトラブルシューティングと解決策

導入Xiao A がコードを書いていたところ、DBA Xiao B が突然、「急いでユーザー固有情報...

Windows での MySQL 5.7.18 インストール チュートリアル

この記事では、圧縮パッケージから MySQL をインストールする方法について説明します。 1. My...

MySQLメモリストレージエンジンに関する知識

メモリストレージエンジンに関する知識ポイントメモリ ストレージ エンジンは日常業務ではほとんど使用さ...

divは、自動入力スタイルをブロックする入力ボックスとして入力を使用せずにコンテンツを入力できます。

今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

ろうそくを溶かす(水滴)サンプルコードを実現する純粋な CSS

成果を達成する実装のアイデアフィルターのコントラストとぼかしを利用して溶ける効果を実現します。親要素...

Vue でスクロールバーのスタイルを変更する方法

目次まず、スクロール バーのスタイルを変更するには、疑似要素-webkit-scrollbarを使用...

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグ...

HTML 選択タグにおける単一選択と複数選択の詳細な説明

select 要素は、単一選択または複数選択のメニューを作成します。フォームが送信されると、ブラウザ...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...