A)はじめに:
サーバー側のリビジョン画像アップロードロジック、圧縮された3つの部分にファイル自体、その後、クラウドストレージにアップロード。
GraphicsMagickの+ IM4Javaを選択し、弱い同時実行のImageMagick + Jmagickをあきらめます。
何度も繰り返し、ちょうどので、いくつか少なすぎるGraphicsMagickのは、オンラインで利用可能とIM4Javaに学び、唯一の公式文書を読み以上会って、何度も異常なことができます!これは私がこの記事の理由の一つを書いたものです。
im4java参考文献:
1)请详见Developer's Guide: http://im4java.sourceforge.net/docs/dev-guide.html
2)github上im4java的源码:https://github.com/Widen/im4java
GraphicsMagickの参照:
1)http://www.graphicsmagick.org
テストを使用して、ローカルにインストールし、パフォーマンスはまだ、その後、実際のパフォーマンスをテストするテストサーバーの展開に配置され、OK感じます。ローカル環境は非常に良い、インストールの下で勝利、GM(GraphicsMagickの)勝利で、ソフトウェアのインストールは、通常と違いはありません。
B)使用IM4Java:
内容、効果はツール(もちろんGMと呼ばれる圧縮画像を、意味)検索パスを、使用する前にツールを設定することであるとの設定の方法のこれらのタイプについて説明します。「環境の設定作業を開始する前に、」開発者ガイドを見て違い。
私はパスDをインストールした場合、このような勝利のインストールパスとして、:\ GraphicsMagickの-1.3.19-Q16は、その後、コードは次のとおりです。
String myPath="D:\\GraphicsMagick-1.3.19-Q16";
ProcessStarter.setGlobalSearchPath(myPath);
注:我们不能在linux服务器中这么写代码,linux直接就设置环境变量:export PATH=$PATH:/abc...,其中/abc是你的GM工具所在路径,比如我的是/home/db/roderickyu/soft/bin
シンプルな使用法は、直接ドキュメントを見て、私はいくつかのコンテンツのドキュメントを読み出すことは容易ではありませんここに書きました:
压缩时可以直接添加本地的图片,比如:
IMOperation op = new IMOperation();
op.addImage("D:\\test.jpg"); // 输入要压缩的文件路径
op.resize(640); // 多番尝试后才知道这是限定width,height等比缩放
op.addImage("D:\\newTest.jpg"); // 压缩后的文件的输出路径,当然可以没有扩展名!
还有一种是对输入流进行压缩,比如官方文档中:
IMOperation op = new IMOperation();
op.addImage("-"); // read from stdin
op.addImage("tif:-"); // write to stdout in tif-format
代码中tif是指按照tif格式进行压缩,但是变化不明显(而且压缩后的大小与size大小不成正比),很容易给初学者造成是不是代码不好使的挫败感!将tif换成jpg压缩的大小变化就明显了。这是一个坑!
回到这个需求来,我们只有一个输入流,怎么把这个输入流压缩成3份大小不等的文件呢?
将输入流转化成byte数组,就不存在流被第一个文件读完第二三的文件没有流可以读时报异常。。。empty input file...
代码为:
InputStream fileStream = ......
int total = fileStream.available();
byte[] bs = new byte[total];
fileStream.read(bs);
解決策だった後にGMは、GMに従い、公式ドキュメントをインストールするために失敗しました:現在のパスをインストールするための読み書き権限でのパスは、Linuxユーザーではない、読んで、聖歌や変更ログインID聖歌の現在の状態のパスに書き込むことができます〜
最後に、パフォーマンスはかなり良いですテスト!
ます。https://www.cnblogs.com/xu-thinking/p/3660779.htmlで再現