質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

749閲覧

copper.jsでトリミングしたbase64データをリサイズしてアップロードしたい

Webtuuuu

総合スコア30

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/04/18 16:56

実現したいこと

PHP側で行っている画像のリサイズをjs側で行いたい。

  • copper.jsを利用して画像をトリミング
  • アップロードボタンを押したタイミングで指定値にリサイズ(js)
  • トリミングとリサイズをした画像をPOSTでPHPに渡す(Ajax)
  • 画像をデコードしてサーバーに保存(PHP)
  • 結果をブラウザに通知(js)

発生している問題

実現したいことは上記なのですが、
copper.jsでbase64形式になったデータをjsでリサイズする方法がわかりません。
そのため今は応急処置的に下記のような実装になっています。

  • copper.jsを利用して画像をトリミング
  • トリミング後リサイズ前のbase64データをPOSTでPHPに渡す(Ajax)
  • base64データをデコードして一度サーバーに保存(PHP)
  • 保存した画像をまた取り出してトリミングして上書き保存(PHP)※2重アップロード状態です
  • 結果をブラウザに通知(js)

※PHPでもbase64データのリサイズ方法がわからなかったので一度そのままアップロードしてます。

jsでbase64をリサイズする方法がわからないため、PHP側でリサイズをかけています。
しかし、この方法だとアップロードに時間がかかり負荷が大きいため、js側で画像処理を終わらせ、PHPではデコードとアップロードのみの処理にしたいです。

現在のソースコード

HTML

1<div class="uploadbtn">アップロードボタン</div> 2<img id="preview" src="data:image/jpeg;base64,/9j/4AAQSkZJRgA........">

javaScript

1$('.uploadbtn').click(function(){ 2 // 3 // おそらくここに何かしらのリサイズ処理を入れる? 4 // 5 $.ajax({ 6 type: 'POST', 7 url: "upload.php", 8 data: { 9 imgdata: $('#preview').cropper('getCroppedCanvas').toDataURL("image/png") 10 }, 11 success: function(data) { 12 if (data == 'UPLOAD OK') { 13 alert('アップロードが完了しました。'); 14 } else { 15 alert(data); 16 } 17 }, 18 error: function() { 19 alert("サーバーエラーです。"); 20 } 21 }); 22});

PHP

1<?php 2if ($_POST) { 3 // base64デコード 4 $data = $_POST['imgdata']; 5 $base64data = explode (",",$data); 6 $decodedata = base64_decode($base64data[1]); 7 8 // finfo_bufferでMIMEタイプを取得 9 $finfo = finfo_open(FILEINFO_MIME_TYPE); 10 $mime_type = finfo_buffer($finfo, $decodedata); 11 12 /* 拡張子情報の取得・セット */ 13 $imginfo = getimagesize($data); 14 $filesize = strlen($decodedata)."\n"; 15 16 if($mime_type == 'image/jpeg'){ 17 $extension = ".jpg"; 18 header ('Content-Type: image/jpg'); 19 } 20 if($mime_type == 'image/png'){ 21 $extension = ".png"; 22 header ('Content-Type: image/png'); 23 } 24 if($mime_type == 'image/gif'){ 25 $extension = ".gif"; 26 header ('Content-Type: image/gif'); 27 } 28 29 // ファイル容量が10mb以上だったらエラー 30 if ($filesize <= 10000000) { 31 /* 拡張子存在チェック */ 32 if(!empty($extension)){ 33 34 // 正式保存先ファイルパス 35 $file_save = "img/testupload.jpg"; 36 37 // ファイル移動 38 $result = file_put_contents($file_save, $decodedata); //ここでリサイズ前に一度保存しちゃう 39 40 list($org_w, $org_h) = getimagesize($file_save); // 元の画像名を指定してサイズを取得 41 42 // 拡大するサイズを指定 43 $copy_w = 400; 44 $copy_h = 400; 45 46 // オリジナルファイルの画像リソース 47 $org_img = imagecreatefrompng($file_save); 48 49 // コピー画像のリソース 50 $copy_img = imagecreatetruecolor($copy_w, $copy_h); 51 52 // リサイズ 53 imagecopyresized($copy_img, $org_img, 0, 0, 0, 0, $copy_w, $copy_h, $org_w, $org_h); 54 55 // 拡大したコピー画像を表示 56 imagejpeg($copy_img, $file_save, 100); 57 58 echo "UPLOAD OK"; 59 60 } else { 61 echo '選択されたファイルは対応していません。'; 62 } 63 } else { 64 echo '画像の容量が大きすぎます。'; 65 } 66} 67?>

補足情報(参照)

Cropper.jsを使ってみる

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

Imagickを使用しました。
https://www.sejuku.net/blog/74338

投稿2022/10/18 09:37

Webtuuuu

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問