tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6.0でJPEGファイルの余白を削除
記事No16668
投稿日: 2023/11/22(Wed) 18:27
投稿者悩み深き少年
VB6.0でJPEGファイルの右側の余白(白色)を削除して、リサイズしたいのですが方法が分かりません。

そもそもVB6.0で出来るのかも含めて、教えていただけませんか。

宜しくお願いします。

[ツリー表示へ]
タイトルRe: VB6.0でJPEGファイルの余白を削除
記事No16669
投稿日: 2023/11/24(Fri) 15:57
投稿者魔界の仮面弁士
> VB6.0でJPEGファイルの右側の余白(白色)を削除して、リサイズしたいのですが方法が分かりません。

画像の加工には、VB6 の PaintPicture ステートメントを使えます。
これは、画像の一部領域だけを転写する機能があります。
https://www.paveway.info/entry/2018/10/25/vb_copyimage
https://masudahp.web.fc2.com/vb6/vb6first/pict031.html


一方、そうして編集結果を保存する場合、標準の SavePicture では Jpeg になりません。
Jpeg 化する機能は標準機能としては搭載されていませんが、
下記のような手法で JPEG ファイル化できます。


(案1) OS 標準の GDI+ API だけで JPEG 化する
当方の自作関数ですが、SavePictureJpeg という関数を呼ぶだけです。
https://gist.github.com/Benshi/5fb2e29171f8a89c87c0e7875ce35a89

(案2) フリーソフトの SaveJPG.dll の DCSavetoJPEG 関数を使う方法
こちらは追加で DLL が必要です。
https://www.vector.co.jp/soft/win95/prog/se093621.html
http://hanatyan.sakura.ne.jp/vbhlp/Picturejpg.htm


外部モジュールに頼っても良いのであれば、画像処理用の DLL は
他にもありますので、ご興味があれば探してみてください。

[ツリー表示へ]
タイトルRe^2: VB6.0でJPEGファイルの余白を削除
記事No16675
投稿日: 2023/11/29(Wed) 09:54
投稿者悩み深き少年
魔界の仮面弁士様

丁寧な御説明ありがとうございます。

ご教授いただいた内容を色々試してみます。

[ツリー表示へ]
タイトルRe^2: VB6.0でJPEGファイルの余白を削除
記事No16676
投稿日: 2023/12/05(Tue) 15:21
投稿者悩み深き少年
GDI32やGDI+などを用いて試行しましたが上手くいきません。

JPEGファイルのサイズが8000×5120のためPictureBoxを用いる方法もダメでした。

何か方法はありませんか?

[ツリー表示へ]
タイトルRe^3: VB6.0でJPEGファイルの余白を削除
記事No16677
投稿日: 2023/12/05(Tue) 18:13
投稿者魔界の仮面弁士
> JPEGファイルのサイズが8000×5120のためPictureBoxを用いる方法もダメでした。

サイズが大きいと、PictureBox で扱うのはキツそうですね。
コマンドラインツール ffmpeg を使うのは如何でしょうか。
https://qiita.com/cha84rakanal/items/af7884d9188ef1787a90
https://ffmpeg.org/ffmpeg.html


以下実験。

手元の環境にインストールした ffmpeg は
"D:\tools\ffmpeg\bin\ffmpeg.exe" にあります。

実験のため、7986x11135 の JPEG ファイル(20,734,759 バイト)を
"E:\7986x11135.jpg" というファイル名で準備しました。
https://upload.wikimedia.org/wikipedia/commons/f/f8/%22Books_are_weapons_in_the_war_of_ideas%22_-_NARA_-_513575_-_restored.jpg



ここから、元画像の左上からX座標1691ピクセル、Y座標1657ピクセルの位置から
横3247ピクセル、縦3384ピクセルのサイズで切り出すために、
このようなコマンドライン文字列を指定してみます。

Dim cmd As String
cmd = "D:\tools\ffmpeg\bin\ffmpeg.exe -i E:\7986x11135.jpg -vf crop=3247:3384:1691:1657 E:\悩み深き少年.jpg"
Shell cmd, vbNormalFocus


これにより、3247x3384 の JPEG ファイル(473,312 バイト) "悩み深き少年.jpg" が生成されました。

[ツリー表示へ]
タイトルRe^4: VB6.0でJPEGファイルの余白を削除
記事No16678
投稿日: 2023/12/07(Thu) 17:06
投稿者悩み深き少年
魔界の仮面弁士様

お世話になります。

ffmpegではなくImageMagickというものを使ってみました。

ImageMagickをインストールし、コマンドラインから

mgick before.jpg -fuzz 1% -trim after.jpg

とやるだけで実現できました。

APIで実現したかったですが、こんなに簡単にできるので

こちらを使用したいと思います。

ありがとうございました。

[ツリー表示へ]