私はLaravel 5.2フレームワークを使用しています。私のアプリケーションの要件は、データ・バンド幅の消費を最小限に抑えるためにクライアント側のイメージ圧縮を行うことです。これを達成するために、JavaScriptやjQueryのソリューションを探しています。私の前回のフォームアップロードを使用したマルチパートデータのアップロードから、いくつかの画像がサーバーにアップロードされることがわかったので、画像アップロードの前にクライアント側の向きを修正する必要があります。画像はajaxを使用してアップロードされます。結果として得られる画像のサイズは240x240でなければなりません。Javascript/jQuery画像を正しいoreantation postに圧縮し、Ajaxを使用してコントローラに保存するLaravel 5.2
1
A
答えて
2
これは比較的良い質問ですが、なぜ一部の人々が投票していないのか分かりません。多分問題の間違った句読点。
イメージを圧縮する最もよい方法は、最初にhtmlキャンバスに描画することです。あなたはEXIFのJavaScriptライブラリと、次の機能を含めることを忘れないでくださいもちろんの
var oFReader = new FileReader();
oFReader.readAsDataURL(document.getElementById("dstv_full_image").files[0]);
oFReader.onloadend = function() {
//declare the exif variable
var exif =EXIF.readFromBinaryFile(base64ToArrayBuffer(this.result));
//dynamicaly create the canvas
var canvas= document.createElement('canvas');
canvas.id = "CursorLayer";
canvas.width = 160;
canvas.height = 160;
canvas.style.zIndex = 8;
canvas.style.position = "absolute";
canvas.style.border = "1px solid";
//declare canvas context
var ctx = canvas.getContext("2d");
var img = new Image();
//then on image load else code will run before and the result will be a black uploaded image!
img.onload = function() {
var orientation =exif.Orientation;;
switch (orientation) {
case "2":
// horizontal flip
ctx.translate(width, 0)
ctx.scale(-1, 1)
ctx.drawImage(img, 0, 0,240, 240);
break
case "3":
// 180° rotate left
//ctx.translate(width, height)
ctx.rotate(Math.PI)
ctx.drawImage(img, -240, -240,240, 240);
break
case "4":
// vertical flip
//ctx.translate(0, height)
ctx.scale(1, -1)
ctx.drawImage(img, 0, 0,240, 240);
break
case "5":
// vertical flip + 90 rotate right
ctx.rotate(0.5 * Math.PI)
ctx.scale(1, -1)
ctx.drawImage(img, 0, -240,240, 240);
break
case "6":
// 90° rotate right
ctx.rotate(0.5 * Math.PI)
//ctx.translate(0, -height)
ctx.drawImage(img, 0, -240,240, 240);
break
case "7":
// horizontal flip + 90 rotate right
ctx.rotate(0.5 * Math.PI)
//ctx.translate(width, -height)
ctx.scale(-1, 1)
ctx.drawImage(img, 0, -240,240, 240);
break
case "8":
// 90° rotate left
//alert("steve")
ctx.rotate(-0.5 * Math.PI)
//ctx.translate(-width, 0)
ctx.drawImage(img, -240,0, 240, 240);
break
default:
ctx.drawImage(img, 0 ,0, 240, 240);
break
}
var dataURL=canvas.toDataURL();
var request = $.ajax({
url: "settings_picture_save",
type: "POST",
data: {quest_id : dataURL},
dataType: "html"
});
request.done(function(msg) {
console.log(msg);
}
})
}
img.src =this.result;
}
ファイル入力を使用していると仮定すると、
あなたのコントローラpublic function settings_picture_save(Request $request){
$src = Input::get('quest_id');
//get the base-64 from data
//$base64_str = substr($myquest_id, strpos($myquest_id, ",")+1);
$src = str_replace('data:image/png;base64,', '', $src);
$src = str_replace(' ', '+', $src);
//decode base64 string
$image = base64_decode($src);
$png_url = "product-".time().".png";
$path = ('uploads/' . $png_url);
//Image::make($image->getRealPath())->save($path);
// write image
$result = file_put_contents($path, $image);
echo json_encode('done');
}
もちろんのドンに続いて
function base64ToArrayBuffer (base64) {
base64 = base64.replace(/^data\:([^\;]+)\;base64,/gmi, '');
var binaryString = window.atob(base64);
var len = binaryString.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
必要なルートを忘れないでください
+0
ありがとうございます。 exif.jsライブラリを正しく実装する方法がわかりませんでした。保存されたイメージが戻ってきたので、できる限りオープンな質問を投稿しようとしました。私はほとんどこのアプローチをあきらめました。 –
関連する問題
- 1. PCAを使用した画像圧縮
- 2. SVDを使用した画像圧縮
- 3. 損失圧縮技術を使用した画像圧縮
- 4. OpenCV Javaを使用して画像を圧縮して特定のフォルダに保存する方法
- 5. 画像を圧縮せずにAndroidに保存するには?
- 6. Laravel Cant保存画像を使用して保存
- 7. ワードプレスでAjaxを使用して画像を保存する
- 8. laravel画像の介入は、ユーザーがアップロードした画像を圧縮するのに適していますか?
- 9. どのように圧縮画像を使用しますか?
- 10. アップロード画像AJAX - Laravel 5.2
- 11. Bitmapは保存後に粒状の画像を圧縮します
- 12. ファイルをアップロードし、圧縮してメモリに保存します。
- 13. Laravel 5.2 - 介入画像、base64入力画像を保存
- 14. POSTパラメータを使用してHTTPのテキストを圧縮する
- 15. asp.netに保存する前に画像を圧縮する方法は?
- 16. Ajax POSTを使用してPHPのJSONローカルファイルを保存する
- 17. アンドロイド:新しい画像をクリックして圧縮し、サーバー
- 18. Linux/sh:7zipフルパスを保存して圧縮するには?
- 19. 画像をビットマップに変換して圧縮する
- 20. Android:圧縮してSQLiteデータベースに画像を挿入する
- 21. ffmpegで1つの画像動画を正しく圧縮するには?
- 22. 保存しないときにビットマップを圧縮する方法
- 23. Mapbox新しいAPIと画像圧縮
- 24. JAVAを使用して画像をアップロードしてフォルダに保存
- 25. ajax laravelを使用してデータベースとフォルダに画像をアップロード5.4
- 26. Android用Picassoライブラリを使用して画像を圧縮する方法は?
- 27. opencvでメディアンフィルタを使用しているが、メジアンフィルタ機能を使用していない画像圧縮
- 28. ビットマップを使用して画像を圧縮するとエラーが発生する
- 29. WIA:ファイルを保存するときに圧縮なし
- 30. CarrierWave in Railsを使用して画像の2つのバージョン(圧縮および非圧縮)をアップロードする
このすべてについて独自の調査を行う必要があります。特定のコードに関連する問題が発生したときに戻ってください – charlietfl