【C言語】libjpegのインストールと使用方法・使用例

libjpegの使い方解説ページアイキャッチ

こちらでは Mac に libjpeg をインストールする手順と libjpeg を用いたプログラムの例を紹介します。

メモ

試したOSは下記の通りです。他の環境では試せていませんのでご了承ください。

  • macOS HighSierra(バージョン10.13.4)

ダウンロードされるフォルダ違うなどの違いがありますが、LINUX 環境でも手順は参考になると思います。

libjpeg とは

libjpeg は JPEG 画像ファイルを扱うためのライブラリです。

この libjpeg を利用することで、C言語などのプログラムから簡単に JPEG 画像を読み込んだり、JPEG 画像を作成したりできるようになります。

libjpeg のインストール

それでは libjpeg のインストール方法について解説していきます。

このインストールの基本的な流れは下記になります。

  • ダウンロード
  • 設定
  • ライブラリ生成
  • インストール
  • インストールの確認

スポンサーリンク

libjpeg のダウンロード

まず libjpeg をダウンロードするためにhttp://www.ijg.org/files/にアクセスしましょう。

上のような画面が表示されると思いますので、最新の.tar.gzファイルをダウンロードします。2018/07/31現在だとv9cが最新のようでした。

このページから JFIF(JPEG の規格の一つ)の仕様書もダウンロードするできます

私が見た時だと「jfif3.pdf」がダウンロードできました

JPEG の仕様も理解したい人は読んでみてください

続いてターミナルでダウンロードしたファイルがあるフォルダにアクセスします。

ターミナルアプリは「アプリケーション」→「ユーティリティ」にあります。


私がダウンロードした .tar ファイルをダウンロードフォルダに保存しましたので下記コマンドでフォルダにアクセスしました。

cd /Users/[私のユーザ名]//Downloads/

続いてダウンロードした .tar.gz ファイルを下記コマンドにより展開します。「jpegsrc.v9c.tar」の部分はダウンロードしてきたファイル名に合わせて変更してください

tar xvzf jpegsrc.v9c.tar 

フォルダが作成され、その中に様々なファイルが展開されるはずです。私の場合は「jpeg-9c」というフォルダが作成されました。

展開が完了したら、その作成したフォルダに cd コマンドで移動しましょう。

libjpeg の設定

続いてそのフォルダで下記コマンドを実行します。これにより libjpeg をあなたの PC にインストールするための設定が行われます。

./configure

このコマンド実行すればターミナル上にメッセージが表示され、1分かからずに処理が完了するはずです。

最後の方のメッセージは下記のような感じでした。良ければご参考に。

checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... yes
checking for gcc option to produce PIC... -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin17.5.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking libjpeg version number... 12:0:3
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libjpeg.pc
config.status: creating jconfig.h
config.status: executing depfiles commands
config.status: executing libtool commands

libjpeg ライブラリの生成

続いて同じフォルダ内で下記の make コマンドを実行します。これにより libjpeg ライブラリが生成されます。

make

こちらも1分ほどで処理が完了します。最後の方のメッセージはこんな感じ。

  CCLD     libjpeg.la
  CC       cjpeg.o
  CC       rdppm.o
  CC       rdgif.o
  CC       rdtarga.o
  CC       rdrle.o
  CC       rdbmp.o
  CC       rdswitch.o
  CC       cdjpeg.o
  CCLD     cjpeg
  CC       djpeg.o
  CC       wrppm.o
  CC       wrgif.o
  CC       wrtarga.o
  CC       wrrle.o
  CC       wrbmp.o
  CC       rdcolmap.o
  CCLD     djpeg
  CC       jpegtran.o
  CC       transupp.o
  CCLD     jpegtran
  CC       rdjpgcom.o
  CCLD     rdjpgcom
  CC       wrjpgcom.o
  CCLD     wrjpgcom

スポンサーリンク

libjpeg のインストール

次に libjpeg をインストールします。次のコマンドによりインストールが行われるはずです。

sudo make install

sudo をコマンドの前につけると、管理者権限でコマンドを実行を行うことになります。コマンドを実行するとパスワードが求められますので、管理者のパスワード(Macのパスワード)を入力してください。

管理者権限でないとファイルの編集や追加削除の権限がなくてコマンド実行しても失敗しますので注意してください。

インストールはすぐ処理が完了しますね。最後の方のメッセージを念のため載せておきます。

libtool: install: /usr/bin/install -c .libs/libjpeg.a /usr/local/lib/libjpeg.a
libtool: install: chmod 644 /usr/local/lib/libjpeg.a
libtool: install: ranlib /usr/local/lib/libjpeg.a
 ./install-sh -c -d '/usr/local/bin'
  /bin/sh ./libtool   --mode=install /usr/bin/install -c cjpeg djpeg jpegtran rdjpgcom wrjpgcom '/usr/local/bin'
libtool: install: /usr/bin/install -c .libs/cjpeg /usr/local/bin/cjpeg
libtool: install: /usr/bin/install -c .libs/djpeg /usr/local/bin/djpeg
libtool: install: /usr/bin/install -c .libs/jpegtran /usr/local/bin/jpegtran
libtool: install: /usr/bin/install -c rdjpgcom /usr/local/bin/rdjpgcom
libtool: install: /usr/bin/install -c wrjpgcom /usr/local/bin/wrjpgcom
/bin/sh /Users/uedakazuhiro/Downloads/jpeg-9c/install-sh -d /usr/local/include
/usr/bin/install -c -m 644 jconfig.h /usr/local/include/jconfig.h
 ./install-sh -c -d '/usr/local/include'
 /usr/bin/install -c -m 644 jerror.h jmorecfg.h jpeglib.h '/usr/local/include'
 ./install-sh -c -d '/usr/local/share/man/man1'
 /usr/bin/install -c -m 644 cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1 '/usr/local/share/man/man1'
 ./install-sh -c -d '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 libjpeg.pc '/usr/local/lib/pkgconfig'

インストールの確認

最後にインストールされたことを確認しておきましょう。

今まで作成したC言語のプログラムファイルをコンパイルしてやるときに、最後に -ljpeg オプションを付けてコンパイルしてみてください。下記のような感じです。

-ljpeg を付けると libjpeg をリンクしてやることが可能になります。これにより自分のプログラムで jpeg 関連の様々な関数が使用可能になります。

gcc japanese.c -o japanese.exe -ljpeg

エラーが表示されずコンパイルが完了すれば、libjpeg のインストールに成功です。

インストールがうまくできていなければ下記のようなメッセージが表示されますので再度手順を確認してみてください。

ld: library not found for -ljpeg
clang: error: linker command failed with exit code 1 (use -v to see invocation)

libjpeg を使用したJPEGファイル読み込み・書き込み関数の作成

続いて、インストールした libjpeg を用いて JPEG ファイルを読み込み・書き込みを行う関数の例を紹介していきたいと思います。

スポンサーリンク

ヘッダーファイル

まずは libjpeg に関連するヘッダーをインクルードしたり、必要な構造体の定義、JPEG ファイルを読み込み・書き込みする関数の定義を行うヘッダーファイルを用意します。

下記がそのヘッダーファイルの例になります。

myJpeg.h
#include <stdio.h>
#include <stdlib.h>

#include "jpeglib.h"

typedef struct{
  unsigned char *data;
  unsigned int width;
  unsigned int height;
  unsigned int ch;
} BITMAPDATA_t;

int jpegFileReadDecode(BITMAPDATA_t *, const char*);
int jpegFileEncodeWrite(BITMAPDATA_t *, const char*);
int freeBitmapData(BITMAPDATA_t *);

ポイントを説明していきます。

jpeglib.hのインクルード

libjpeg が提供する関数の宣言や定数の定義等は jpeglib.h で行われています。

ですので、libjpeg を利用する場合は jpeglib.h をインクルードする必要があります。

jpeglib.hのインクルード
#include "jpeglib.h"

BITMAP 形式データ構造体の定義

また、下記では BITMAP 形式データの情報格納用構造体 BITMAPDATA_t を定義しています。

BITMAP情報格納用の構造体
typedef struct{
  unsigned char *data;
  unsigned int width;
  unsigned int height;
  unsigned int ch;
} BITMAPDATA_t;

それぞれのメンバの説明は下記のようになります。

  • data:PNG をデコードした BITMAP 形式画像データの先頭アドレス
  • width:画像の横幅
  • height:画像の高さ
  • ch:画像の色数(カラーの時は 3、グレーの時は 1

BITMAP 形式画像データって何?という方は下記ページで説明していますので是非参考にしてください。

画像データの解説ページアイキャッチ画像データの構造・画素・ビットマップデータについて解説

上のページでも解説しているように data のポインタの先は下図のように各ピクセルの RGB 順にデータが並んでいます。

ソースファイル

次は実際に libjpeg が提供している関数を利用して JPEG ファイルを読み込んだり、JPEG ファイルとして保存したりする関数を作成していきます。

myJpeg.c
#include "myJpeg.h"

int jpegFileReadDecode(BITMAPDATA_t *bitmapData, const char* filename){
  struct jpeg_decompress_struct jpeg;
  struct jpeg_error_mgr err;

  FILE *fi;
  int j;
  JSAMPLE *tmp;

  jpeg.err = jpeg_std_error(&err);

  fi = fopen(filename, "rb");
  if(fi == NULL){
    printf("%sは開けません\n", filename);
    return -1;
  }

  jpeg_create_decompress(&jpeg);
  jpeg_stdio_src(&jpeg, fi);
  jpeg_read_header(&jpeg, TRUE);
  jpeg_start_decompress(&jpeg);

  printf("width = %d, height = %d, ch = %d\n", jpeg.output_width, jpeg.output_height, jpeg.out_color_components);

  bitmapData->data =
    (unsigned char*)malloc(sizeof(unsigned char) * jpeg.output_width * jpeg.output_height * jpeg.out_color_components);
  if(bitmapData->data == NULL){
    printf("data malloc error\n");
    fclose(fi);
    jpeg_destroy_decompress(&jpeg);
    return -1;
  }

  for(j = 0; j < jpeg.output_height; j++){
    tmp = bitmapData->data + j * jpeg.out_color_components * jpeg.output_width;
    jpeg_read_scanlines(&jpeg, &tmp, 1);
  }

  bitmapData->height = jpeg.output_height;
  bitmapData->width = jpeg.output_width;
  bitmapData->ch = jpeg.out_color_components;

  jpeg_finish_decompress(&jpeg);
  jpeg_destroy_decompress(&jpeg);

  fclose(fi);

  return 0;
}

int jpegFileEncodeWrite(BITMAPDATA_t *bitmapData, const char *filename){
  struct jpeg_compress_struct jpeg;
  struct jpeg_error_mgr err;
  FILE *fo;
  JSAMPLE *address;
  int j;

  jpeg.err = jpeg_std_error(&err);
  jpeg_create_compress(&jpeg);

  fo = fopen(filename, "wb");
  if(fo == NULL){
    printf("%sは開けません\n", filename);
    jpeg_destroy_compress(&jpeg);
    return -1;
  }

  jpeg_stdio_dest(&jpeg, fo);

  jpeg.image_width = bitmapData->width;
  jpeg.image_height = bitmapData->height;
  jpeg.input_components = bitmapData->ch;
  jpeg.in_color_space = JCS_RGB;
  jpeg_set_defaults(&jpeg);

  jpeg_set_quality(&jpeg, 50, TRUE);

  jpeg_start_compress(&jpeg, TRUE);

  for (j = 0; j < jpeg.image_height; j++ ) {
    address = bitmapData->data + (j * bitmapData->width * bitmapData->ch);
    jpeg_write_scanlines(&jpeg, &address, 1);
  }

  jpeg_finish_compress(&jpeg);

  jpeg_destroy_compress(&jpeg);

  return 0;
}

int freeBitmapData(BITMAPDATA_t *bitmap){
  free(bitmap->data);
  return 0;
}

特に JPEG の読み込みを行う jpegFileReadDecode 関数と、JPEG の書き込みを行う jpegFileEncodeWrite 関数の詳細を解説していきます。

JPEG ファイルの読み込みを行う関数

jpegFileReadDecode 関数は JPEG ファイルを読み込む関数になります。

jpegFileReadDecode の処理の流れは下記の通りです。

  • エラーハンドラの設定
  • デコーダの初期化
  • 読み込む JPEG ファイルの設定
  • JPEG のヘッダ読み込み
  • デコードの開始
  • デコード結果格納用のメモリ確保
  • デコードとメモリへのコピー
  • 画像情報を BITMAPDATA_t へ格納
  • デコーダの終了

ここから各処理の詳細を解説していきます。

エラーハンドラの設定

下記でエラーハンドラの設定を行っています。これによりエラー起きた時にエラーの原因を出力してくれるようになります。

エラーハンドラの設定
  jpeg.err = jpeg_std_error(&err);

デコーダの初期化

下記でデコーダの初期化・作成を行います。今後はこのデコーダを利用して、JPEG ファイルのデコードを行うことになります。

デコーダの初期化
  jpeg_create_decompress(&jpeg);

読み込む JPEG ファイルの設定

下記で読み込む JPEG ファイルの設定を行います。第2引数の fi は事前に fopen でオープンしたファイルポインタになります(fopen の戻り値)。

読み込むJPEGの設定
  jpeg_stdio_src(&jpeg, fi);

JPEG のヘッダの読み込み

続いて JPEG ファイルのヘッダの読み込みを下記で行っています。これにより第1引数の jpeg に JPEG の情報(画像サイズなど)が格納されます。

JPEGヘッダの読み込み
  jpeg_read_header(&jpeg, TRUE);

デコードの開始

下記ではデコードの開始を libjpeg に指定しています。この後に、後に説明する jpeg_read_scanlines を実行することで、JPEG ファイルをデコードすることができます。

デコードの開始 

  jpeg_start_decompress(&jpeg);

デコード結果格納用のメモリ確保

下記ではデコードした結果を格納するメモリを malloc( 関数で確保しています。

jpeg.output_widthjpeg.output_heightjpeg.out_color_components は事前に jpeg_read_header で JPEG のヘッダーから取得した情報(幅・高さ・色数)になります。

メモリ確保
  bitmapData->data =
    (unsigned char*)malloc(sizeof(unsigned char) * jpeg.output_width * jpeg.output_height * jpeg.out_color_components);

デコードとメモリへのコピー

下記では実際に JPEG のデコードを行っています。

jpeg_read_scanlinesでは1ラインずつ順々に JPEGファイル がデコードされ、ビットマップデータに変換されます。

デコードする JPEG ファイルは事前に jpeg_stdio_srcjpeg に設定したファイルになります。

jpeg_read_scanlines の第2引数にはデコードしたビットマップデータを格納するアドレスを格納したポインタのアドレスを指定します。

型としてはポインタのポインタになるところに注意です。

下記を JPEG 画像の高さ分繰り返すことで、JPEG 全体のデコードを行っています。

  • jpeg_read_scanlines を実行して1ラインデコードする
  • デコードしたビットマップデータを格納するアドレスを1ライン分ずらす
JPEGのデコード
  for(j = 0; j < jpeg.output_height; j++){
    tmp = bitmapData->data + j * jpeg.out_color_components * jpeg.output_width;
    jpeg_read_scanlines(&jpeg, &tmp, 1);
  }

画像情報を BITMAPDATA_t へ格納

下記で画像の情報(具体的には高さと幅と色数)を BITMAPDATA_t 構造体のメンバに格納しています。

JPEG デコード後のビットマップデータに画像処理などを行う場合は、この情報を用いて処理を実行します。

画像情報の格納
  bitmapData->height = jpeg.output_height;
  bitmapData->width = jpeg.output_width;
  bitmapData->ch = jpeg.out_color_components;

デコーダの終了

以上で JPEG のデコードは完了していますので、最後に JPEG のデコーダを下記で終了させています。

デコーダの終了
  jpeg_finish_decompress(&jpeg);
  jpeg_destroy_decompress(&jpeg);

スポンサーリンク

JPEG ファイルの書き込み(保存)を行う関数

jpegFileEncodeWrite 関数は JPEG ファイルを書き込む(保存する)関数になります。

jpegFileEncodeWrite 関数の処理の流れは下記の通りです。

  • エラーハンドラの設定
  • エンコーダの作成
  • エンコード結果の書き込み先ファイル設定
  • ヘッダ情報の設定
  • 画質の設定
  • エンコード開始
  • エンコードとファイル書き込み
  • エンコーダの終了

ここから各処理の詳細を解説していきます。

エラーハンドラの設定

下記で JPEG 読み込み時同様にエラーハンドラの設定を行っています。

エラーハンドラの設定
  jpeg.err = jpeg_std_error(&err);

エンコーダの作成

続いて下記でエンコーダを作成しています。今後はこのエンコーダ jpeg を使って JPEG のエンコードを行なっていきます。

エンコーダの作成
  jpeg_create_compress(&jpeg);

エンコード結果の書き込み先ファイル設定

下記ではエンコードした結果を書き込むファイルを設定しています。第2引数 fo には、その書き込み先となるファイルポインタを指定します(fopen の戻り値)。

出力先ファイル設定
  jpeg_stdio_dest(&jpeg, fo);

ヘッダ情報の設定

続いて書き込む JPEG ファイルのヘッダーの情報を設定します。

このページで紹介している関数では、画像の情報は BITMAPDATA_t 構造体に格納するようにしていますので、この構造体のポインタ変数である bitmapData から画像の情報を参照してヘッダ情報を設定しています。

ヘッダ情報の設定
  jpeg.image_width = bitmapData->width;
  jpeg.image_height = bitmapData->height;
  jpeg.input_components = bitmapData->ch;
  jpeg.in_color_space = JCS_RGB;
  jpeg_set_defaults(&jpeg);

最後に実行しているjpeg_set_defaults  は、設定されていない残りのヘッダ情報をデフォルト値に設定してくる関数です。

ただし jpeg_set_defaults 関数では、予め設定された in_color_space に基づいてヘッダ情報を設定するようでしたので、in_color_space を設定してからこの関数は実行した方が良さそうです。

画質の設定

JPEG では画質を設定することが可能です。

この画質は jpeg_set_quality の第2引数で指定することが可能です。指定可能な値は 0 から 100のようで、値が大きい方が画質が良くなるようです。

画質の設定
  jpeg_set_quality(&jpeg, 50, TRUE);

エンコード開始

下記では jpeg_start_compress を実行してエンコードの開始を行います。

これ以降に jpeg_write_scanlines を実行することで JPEG のエンコードを行うことができます。

エンコード開始
  jpeg_start_compress(&jpeg, TRUE);

エンコードとファイル書き込み

実際に JPEG をエンコードし、ファイルにそのエンコード結果を書き込んでいるのが下記になります。

第2引数で指定したポインタのポインタに格納されているアドレスのデータが JPEG にエンコードされて jpeg_stdio_dest で設定したファイルに書き込みが行われます。

これも読み込み時と同様に 1 ラインずつ処理を行わせています。 

エンコードと書き込み
 for (j = 0; j < jpeg.image_height; j++ ) {
    address = bitmapData->data + (j * bitmapData->width * bitmapData->ch);
    jpeg_write_scanlines(&jpeg, &address, 1);
  }

エンコーダの終了

エンコードが完了したら、最後に下記でエンコーダの終了を行います。

エンコーダの終了
  jpeg_finish_compress(&jpeg);
  jpeg_destroy_compress(&jpeg);

作成した JPEG 読み込み・書き込み関数の使用例

上記で作成した関数の使い方がイメージつくように使用例を書いてみました。

main.c
#include "myJpeg.h"

int main(int argc, char *argv[]){

  BITMAPDATA_t bitmap;
  int i, j, c;
  int ave, sum;
  char outname[256];

  FILE *fo;

  if(argc != 2){
    printf("ファイル名が指定されていません\n");
    return -1;
  }

  if(jpegFileReadDecode(&bitmap, argv[1]) == -1){
    printf("jpegFileReadDecode error\n");
    return -1;
  }

  printf("bitmap->data = %p\n", bitmap.data);
  printf("bitmap->width = %d\n", bitmap.width);
  printf("bitmap->height = %d\n", bitmap.height);
  printf("bitmap->ch = %d\n", bitmap.ch);

#if 0
  /* ちゃんと読み込めているか確認する場合はここを有効に */
  fo = fopen("testoutput.ppm", "wb");
  fprintf(fo, "P6\n#\n%d %d\n255\n", bitmap.width, bitmap.height);
  fwrite(bitmap.data, bitmap.height * bitmap.width * 3, 1,fo);
  fclose(fo);
#endif

  /* グレースケールに変換 */
  for(j = 0; j < bitmap.height; j++){
    for(i = 0; i < bitmap.width; i++){
      sum = 0;
      for(c = 0; c < bitmap.ch; c++){
        sum += bitmap.data[bitmap.ch * (i + j * bitmap.width) + c];
      }
      ave = sum / bitmap.ch;
      for(c = 0; c < bitmap.ch; c++){
        bitmap.data[bitmap.ch * (i + j * bitmap.width) + c] = ave;
      }
    }
  }

  sprintf(outname, "%s", "output.jpg");

  if(jpegFileEncodeWrite(&bitmap, outname) == -1){
    printf("jpegFileEncodeWrite error\n");
    freeBitmapData(&bitmap);
    return -1;
  }

  freeBitmapData(&bitmap);

  return 0;
}

処理の流れ

この main 関数の処理の流れは下記の通りです。

  1. jpegFileReadDecode 関数を使用して JPEG ファイルの読み込みデコード
  2. 1. でデコードした BITMAP データに対して画像処理
  3. 2. 画像処理後の BITMAP データを jpegFileEncodeWrite 関数を使用してエンコード & JPEG ファイルへの書き込み
  4. freeBitmapData 関数でメモリ解放して終了

画像処理

2. の画像処理では、1. でデコードした画像をグレースケールに変換しています(単純に RGB の輝度値の平均値を求めているだけ)。

画像処理をいろいろ試す場合はここをいろいろ変更して試してみると良いと思います。

画像処理
  /* グレースケールに変換 */
  for(j = 0; j < bitmap.height; j++){
    for(i = 0; i < bitmap.width; i++){
      sum = 0;
      for(c = 0; c < bitmap.ch; c++){
        sum += bitmap.data[bitmap.ch * (i + j * bitmap.width) + c];
      }
      ave = sum / bitmap.ch;
      for(c = 0; c < bitmap.ch; c++){
        bitmap.data[bitmap.ch * (i + j * bitmap.width) + c] = ave;
      }
    }
  }

コンパイル

このページで紹介するソースコードでは、 JPEG 読み込み用・書き込み用の関数を myJpeg.c に作成し、それらの関数のプロトタイプ宣言をヘッダーファイルの myJpeg.h で行っています。

ですので、上記のソースコードで myJpeg.h のインクルードを行なっています。

違う名前にする場合は変更必要ですのでお気をつけください。

このページで紹介しているファイル名でソースコードファイルを作成している時、下記のコマンドでコンパイルとプログラムの実行が可能です。

gcc main.c -c
gcc myJpeg.c -c
gcc main.o myJpeg.o -o jpeg.exe -ljpeg
./jpeg.exe test.jpeg

コンパイル時に -ljpeg を付けて libjpeg にリンクすることを忘れないようにしましょう!

実行結果

引数で読み込みたい JPEG ファイルへのパスを指定して実行すれば、その JPEG ファイルをモノクロ化した JPEG ファイル output.jpg が出力されます。

入力した JPEG と出力結果の JPEG もここに表示しておきます(このファイルであれば動作確認しています)。

・入力JPEG

・出力JPEG

また、ここで載せたソースコードはあくまで一例です。

JPEG ファイルを読み込んでデコードするあたりや JPEG ファイルをエンコードして書き込むあたりはご自身が使いやすいようにカスタマイズしてください。

libjpeg が提供する関数

libjpeg が提供する関数の説明は、libjpeg インストール時にダウンロードしてきたフォルダ内の libjpeg.txt に記載されています。

英語なので読むのは大変かもですが・・・。

注意

このページは libjpeg のインストール方法や使用例の紹介を目的としたページであり、libjpeg のライセンス体系については私も詳しくないのでこのページでは言及していません

libjpeg を使用する方は自己責任で使用してください

例えば商用利用等を行う場合はライセンス体系についてご自分で調査してから使用の可否をご判断ください

スポンサーリンク

XCodeでの libjpeg 使用方法

libjpeg を XCode で使用するためには2つの手順が必要です。

インクルードパスを追加

libjpeg 関連の関数をソースコードで使用するためには、これらの関数が定義されているヘッダーファイルをインクルードする必要があります。そのヘッダーファイルがある場所を XCode のプロジェクトに認識させる必要があります。

上の画像の通りに Header Search Paths に jpeglib.h の置いてあるパスを追加します。

MEMO

このページで紹介したインストール方法でインストールした場合は下記にヘッダーが存在すると思います。

/usr/local/include

リンク対象ファイル追加

libjpeg を使用するためにライブラリファイルをリンク対象とする必要があります。

上の画像の通りに Link Binary With Libraries に libjpeg.a を追加すれば良いです。

MEMO

このページで紹介したインストール方法でインストールした場合は下記にライブラリファイルが存在すると思います。

/usr/local/lib

ただし、ここにライブラリがあるとファイルの選択時にこの場所が選択できないかもしれません

その場合は「書類フォルダ」等の適当な場所にコピーしておくと良いと思います。ターミナルから下記のコマンドで libjpeg 関連のライブラリファイルがコピーができます。

cp /usrlocal/lib/libjpeg.* [コピー先]

スポンサーリンク

まとめ

このページでは libjpeg のインストール方法とその使い方について解説しました。

JPEG は現状一番普及している画像フォーマットです。ただその JPEG を読み込むプログラムを作ろうと思うとめちゃくちゃ難しいです。

しかし libjpeg を使えば簡単に JPEG の読み込みや作成が出来てしまいます。是非このページを参考にして libjpeg をインストールしてみてください!

私のサイトでは他にも LibTIFF や libpng、libwebp のインストール方法や使い方についても解説していますので、他の画像フォーマットを利用したい方は是非下記のページも読んでみてください。

libtiffの使い方解説ページアイキャッチ【C言語】LibTIFFのインストールと使用方法・使用例 libpngの使い方解説ページアイキャッチ【C言語】libpngのインストールと使用方法・使用例 libwebpの使い方解説ページアイキャッチ【C言語】libwebpのインストールと使用方法・使用例

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です