2011-07-27 22 views
5

私はjavascriptまたはjQueryを使用して、サーバーにアップロードする前にクライアント側で画像を切り抜いて圧縮したいと考えています。Javascriptのトリミング画像クライアント側

ワークフロー:

  1. 選択画像
  2. クロップ画像の特定のサイズには
  3. 作物
  4. を圧縮アップロード

誰もが前にこれを行っていますか?どのようなプラグインか、何をする必要がありますか?

facebookは画像を圧縮してアップロードする前に自動的に画像のサイズを変更できます。

+0

これが可能かどうかわかりません。 Facebookはあなたがアップロードした画像を取り込み、サーバ上でサイズを変更して保存します。ページ上にイメージのサイズが変更されて表示されます。 PHP用のコードのサイズを変更したい場合は、私が開発したものをいくつか持っています。唯一の問題は、サイズ変更されたPNGに対して不透明度が働いていないことです。 – James

+1

何について? – spacevillain

答えて

6

EDIT(2014):この答えは廃止されました! JavaScriptは、利用可能なブラウザリソースによって、 に深く影響を受ける実装を備えたプログラミング言語です。 3つの 年前にこの投稿が作成された(2011年7月)ブラウザには、 が尋ねたので、OPが信頼できる機能の の種類を持っていなかったので、私の答えです。
これが今行われる方法にまだ興味があるなら、その間に と出てきたこの質問に対する多くの回答を参照してください。しかし、明らかに無意味なので、 はこの答えにさらにコメントすることを控えてください。ありがとうございました。

JavaScriptは、あなたが求めていることを意味するものではありません。選択した画像を操作する機能を提供するサービスがあれば、他の機能が提供される前に画像がサーバーに完全にアップロードされたことを賭けることができます。

+0

それは間違いなく実行できます。ここをクリックしてください:http://stackoverflow.com/questions/12728188/cropping-images-in-the-browser-before-the-upload/12730031#12730031 –

+2

この回答は、2年前に多くのHTML5のもの存在していなかったし、イメージ操作を行っていた存在のすべてのサービスはサーバー側で行った。 – brezanac

+0

私は6年以上にわたってjsをコードしています。私は約2年前に何ができないのか、できないのかを議論したくありません。一番下の行は、このスレッドはまだ*私たちの年齢* *ホットなものであり、更新された答えが必要です。 –

11

あなたはBASE64を使用してそれを行うことができ、私が働いているウェブサイトに目を向ける:http://www.wordirish.com すべての画像は、HTML5を使用してクライアント側で操作していますか古いブラウザではフラッシュ。

あなたはそれを行う必要があります。ケーキの

function thisFunctionShoulBeCallByTheFileuploaderButton(e){ 
    e.preventDefault && e.preventDefault(); 
    var image, canvas, i; 
    var images = 'files' in e.target ? e.target.files : 'dataTransfer' in e ? e.dataTransfer.files : []; 
    if(images && images.length) { 
     for(i in images) { 
      if(typeof images[i] != 'object') continue; 
      image = new Image(); 
      image.src = createObjectURL(images[i]); 
      image.onload = function(e){ 
       var mybase64resized = resizeCrop(e.target, 200, 150).toDataURL('image/jpg', 90); 
       alert(mybase64resized); 
      } 
     }   
    } 
} 

function resizeCrop(src, width, height){ 
    var crop = width == 0 || height == 0; 
    // not resize 
    if(src.width <= width && height == 0) { 
     width = src.width; 
     height = src.height; 
    } 
    // resize 
    if(src.width > width && height == 0){ 
     height = src.height * (width/src.width); 
    } 

    // check scale 
    var xscale = width/src.width; 
    var yscale = height/src.height; 
    var scale = crop ? Math.min(xscale, yscale) : Math.max(xscale, yscale); 
    // create empty canvas 
    var canvas = document.createElement("canvas");     
    canvas.width = width ? width : Math.round(src.width * scale); 
    canvas.height = height ? height : Math.round(src.height * scale); 
    canvas.getContext("2d").scale(scale,scale); 
    // crop it top center 
    canvas.getContext("2d").drawImage(src, ((src.width * scale) - canvas.width) * -.5 , ((src.height * scale) - canvas.height) * -.5); 
    return canvas; 
} 

function createObjectURL(i){ 
    var URL = window.URL || window.webkitURL || window.mozURL || window.msURL; 
    return URL.createObjectURL(i); 
} 

作品;)

+3

レビューのコメント:あなたの答えをありがとう、ありがとうございます。ちょっとしたヒント:回答は素晴らしいですが、ソリューションのすべてのステップについて説明することはさらに喜ばしいことです。 –

+0

mimeは* toDataURL( 'image/jpg'、90); *で* jpeg * not * jpg *にする必要があります。偉大な答えをありがとう。 – Kareem

2

最近のブラウザになりましたjQueryとHTML5のキャンバスを介して画像操作の多くをサポートしています。これを達成するために使用することができるツールが含まれます:

HTML5 Canvas Image Optimization

Pixastic Image Processing Library

Resize & Crop for Jquery (ClientSide)

が、私はそれが同様のソリューションを探している人のために役立ち願っています...

+0

ああ、downvoterにコメントしますか? –

関連する問題