1。サムネイル
アルバムを閲覧するときは、対応するサムネイルを生成する必要がある場合があります。
コードを直接アップロードします。
public class imageutil {private logger log = loggerfactory.getLogger(getClass()); private static string default_prevfix = "thumb_"; Privatic static boolean deffigone_force = false; // //この値はfalse/*** <p> title:thummnailimagegages </p>* <p> title:thummnailimage </p>* <p> <p> <p> <p>説明:画像パスに基づいてサムネイルを生成することをお勧めされます。幅と高さに応じてサムネイルを生成するかどうか(偽の場合、最良のスケールサムネイルが生成されます) */ public void thumbnailimage(string imagepath、int w、int h、string prevfix、boolean force){file imgfile = new file(imagepath); if(imgfile.exists()){try {// imageioサポート画像タイプ:[bmp、bmp、jpg、jpg、wbmp、jpeg、png、png、jpeg、wbmp、gif、gif] string type = arrays.tostring(image.getrederformatnames(); string suffix = null; //画像接尾辞if(imgfile.getname()。indexof( "。")> -1){suffix = imgfile.getName()。substring(imgfile.getName()。lastIndexof( "。") + 1); } //タイプと画像の接尾辞はすべて小文字です。その後、接尾辞が合法かどうかを判断します。戻る ; } log.debug( "ターゲットイメージのサイズ、幅:{}、height:{}。"、w、h);画像img = imageio.read(imgfile); if(!force){//元の画像と必要なサムネイルスケールint width = img.getWidth(null)に基づいて、最も適切なサムネイルスケールを見つけます。 int height = img.getheight(null); if((width*1.0)/w <(height*1.0)/h){if(width> w){h = integer.parseint(new java.text.decimalformat( "0")。 log.debug( "画像の高さを変更、幅:{}、height:{}。"、w、h); }} else {if(height> h){w = integer.parseint(new java.text.decimalformat( "0")。format(width * h/(height * 1.0))); log.debug( "画像の幅、幅を変更:{}、height:{}。"、w、h); }}} bufferedimage bi = new bufferedimage(w、h、bufferedimage.type_int_rgb);グラフィックg = bi.getgraphics(); G.Drawimage(IMG、0、0、W、H、Color.Light_Gray、null); g.dispose();文字列p = imgfile.getPath(); //元のディレクトリとプレフィックスImageio.write(bi、suffix、new file(0、p.lastindexof(file.separator)) + file.separator + prevfix + imgfile.getname())) + file.substring(0、p.lastindexof(file.separator)) + file.substring(0、p.lastindexof(file.separator))に保存します。 log.debug( "元のパスで正常に生成されたサムネイル"); } catch(ioException e){log.Error( "サムネイル画像の生成が失敗しました。"、e); }} else {log.warn( "画像は存在しません。"); }} public static void main(string [] args){new ImageUtil()。thumbnailimage( "c:/users/cm/desktop/my page/my page/girlnoimg.jpg"、100、150、default_prevfix、default_force); }}メインメソッドを直接実行し、対応するパラメーターを入力します。
2。JSと協力して、トリミングされた写真を生成します
個人的なWeiboおよびQQ情報を変更すると、個人的なアバターをアップロードしてから、個人的なアバターをカットしてアップロードできます。クロップド画像のサイズとスタイルはJavaScriptを通じて実装されていますが、新しい画像は生成されません。ただし、JSクロップド画像は、画像のxおよびy座標と幅と高さを提供します。これらの4つのパラメーターを通して、元の画像に基づいて新しいトリミング画像を生成できます。
ステップ:
1.最初に、JSを使用して、ページから画像カットとブラウジング機能を実現しました。 MOOCから提供された情報を参照し、わずかに変更しました。さらに、JCROPなどのプラグインを使用することもできます。これは、非常に良い画像トリミングプラグインです。
住所をダウンロード:http://download.csdn.net/detail/u012385190/9733480
最終レンダリングは上記のとおりです。左側にドラッグしてドラッグし、右側のプレビュー画像をドラッグできます。
2。Javaは、カット写真を生成して保存します
public class imageutil2 {private logger log = loggerfactory.getLogger(getClass()); private static string default_cut_prevfix = "cut_"; / ***説明:元の画像と作物のサイズに基づいてローカル画像をインターセプト* @param srcimgソース画像* @param出力画像出力ストリーム* @param rect部品のサイズを傍受する必要があります*/ public void cotimage(ファイルsrcimg、outputstream output、java.awt.rect.rectisps(){){){){){) java.io.fileinputStream fis = null; ImageInputStream iis = null; try {fis = new fileinputStream(srcimg); // ImageIOサポート画像タイプ:[BMP、BMP、JPG、JPG、WBMP、JPEG、PNG、PNG、// JPEG、WBMP、GIF、GIF] String Type = arrays.ToString(ImageIo.getReaderformatNames()).Replace( " string suffix = null; //画像接尾辞if(srcimg.getName()。indexof( " } //タイプと画像の接尾辞はすべて小文字です。その後、接尾辞が合法かどうかを判断します。戻る; } // fileInputStreamをImageInputStreamに変換しますiis = imageio.createimageinputStream(fis); //画像タイプに従ってこのタイプのImagEReaderを取得emagreader reader = imageio.getimagereadersbysuffix(suffix).next(); reader.setInput(iis、true); ImagEReadParam pAram = reader.getDefaulTreadParam(); param.setsourceregion(rect); bufferedimage bi = reader.read(0、param); Imageio.write(bi、suffix、output); log.info( "画像は正常に生成されます。ディレクトリに移動して表示する"); } catch(filenotfoundexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{try {if(fis!= null)fis.close(); if(iis!= null)iis.close(); } catch(ioexception e){e.printstacktrace(); }}} else {log.warn( "srcイメージは存在しません。"); }} //ターゲットファイルパスパブリックボイドcutimage(file srcimg、string destimgpath、java.awt.rectangle rect){file destimg = new file(destimgpath); if(destimg.exists()){string p = destimg.getPath(); try {if(!destimg.isdirectory())p = destimg.getParent(); if(!p.endswith(file.separator))p = p + file.separator; cutimage(srcimg、new java.io.fileoutputstream(p+ default_cut_prevfix+ "_"+ srcimg.getname())、rect); } catch(filenotfoundexception e){log.warn( "Destイメージは存在しません。"); }} else log.warn( "Dest Imageフォルダーは存在しません。"); } public void cutimage(string srcimg、string destimg、int x、int y、int width、int height){cutimage(new file(srcimg)、destimg、new java.awt.rectangle(x、y、width、height)); } public static void main(string [] args){new ImageUtil2()。cutimage( "C:/users/cm/desktop/my page/images/boynoimg.jpg"、 "c:/users/cm/desktop/my page/mages/imgs"、0、0、61、166); // new ImageUtil2()。 }}この方法は、メインで直接実行できます。渡される4つのパラメーターは、画像パス、左値、最高値、長さ、幅です。
これらの4つのパラメーターを取得する方法を分析しましょう。
1. JSカットを例にとると、F12を通じて以下を取得します。
写真の赤い部分は、画像カットのdivです。クリッピング領域などのサイズと幅をドラッグすることにより、どのパラメーターが変更されたかを観察し、特定の対応するパラメーター値に対応するパラメーター値を決定できます。写真のように、私のx/y/幅/高さはそれぞれ40,28,224,228です。
注:JSでは、divの長さと幅を定義し、画像は300*300と定義します。テストに協力するために、私がダウンロードした画像も300*300です。テストした画像サイズが300*300ではない場合、上記のJavaで直接テストした効果は、フロントエンドで表示されるものとは異なります。フロントエンド画像の幅と高さを300*300として定義し、実際の画像(つまり、Javaの画像)はそうではありません。
では、この問題が処理された場合はどうなりますか?
Javaコードの元の画像の長さと幅を取得し、元の画像の長さと幅が300*300かどうかを判断します。そうでない場合は、画像の300*300サムネイルを生成し、300*300サムネイルをトリミングした画像プロトタイプとして使用します。 (私のコードはそれを処理しません。必要に応じて自分で処理し、写真を使いた後にサムネイルを削除します)
2。JCROPはパラメーターを取得します
図に示すように、JCROPはパラメーターを直接提供し、直接使用できます。しかし、1つの欠点は、フロントエンドページの画像サイズ領域が固定されていないことです。大きなピクセル画像がある場合、非常に醜いです。たとえば、対応するファイルにImage SOGA_BAK.jpgがある場合、この画像に置き換えると悪いでしょう。
要約すると、最初のJSを使用してから、元の画像の長さと幅が300であるかどうかを判断し、300*300サムネイルを生成し、サムネイルを作物のプロトタイプとして使用し、使用後にサムネイルを削除することをお勧めします。
上記は、編集者が紹介したJavaイメージのトリミングと生成のサムネイルの例です。これは、GETリクエストにとって無効な問題です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!