7

画像へのパスを指定して、その画像を別の画像に変換できるようにしたいのですが、形式は異なります。形式とは、.png、.bmp .jpg .tiffなどを意味します。擬似コードでは、これは非常に簡単です。

image = [ImageAPI open: imagePath]
[image save: imagePath withFormat: IMAGEFORMAT] // this is important

しかし、これを行う方法がわかりません。画像の処理に関しては、NSImageクラス以上のことはほとんど知りません)、それは私の問題に対する答えを持っていないようです(このような単純な保存メソッドはありません)。サポートしたいフォーマットのリストは次のとおりです。

  • .png
  • .tiff
  • .gif
  • .jpeg
  • .bmp
  • おそらく.pdf(それほど複雑でない場合)

サポートとは、それらのいずれかを開き、開いた画像をそれらの形式のいずれかに保存することを意味します。ここにはいくつかの組み合わせがあります(15 ???-私は思います)ので、次のように各組み合わせのメソッドを書くことができます:

[self saveTiffImageIntoGifWithPath: path] (*15 !!!)

ただし、APIを使用する方が間違いなく優れています。

万が一、途中で次のようなオプションもあります。

  • アルファを維持するかどうか
  • 画像のサイズを変更する

...オプションですが、私も喜んでサポートします。これを行う簡単な方法があることを本当に望んでいます。ありがとう

PS:このトピックについて質問があったことは知っていますが、それらはすべてiPhone指向であり(Macでこれを実行したい)、複数の形式でこれを実行する方法を提供したものはありませんでした。

4

2 に答える 2

11

さて、ピーターの助けを借りて、私はこれを理解することができました。まず、画像パスを使用している場合は、次のようにNSDataを使用してファイルを直接開きます。

NSData* imgData = [NSData dataWithContentsOfFile: filePath];

NSImageオブジェクトを使用していて、パスを取得するのが難しい場合(たとえば、NSImageViewを使用する場合)、これを実行します(画像は使用しているNSImageオブジェクトです)。

NSData* imgData = [image TIFFRepresentation];

これで画像がNSDataオブジェクトに追加されたので、それをNSBitmapImageRepに取得します。

NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData: imgData];

次に、新しいNSDataオブジェクトを取得しますが、形式は異なります。

NSData* newData = [bitmap representationUsingType: NSPNGFileType properties: nil];
// I used NSPNGFileType as an example, but all the
// types I wanted to convert between (except PDF) are supported

最後に、そのnewDataをファイルに保存します。

[newData writeToFile: newPath atomically: YES]

パイのようにシンプルで、それがどのように機能するかを理解したら!


透明度とサイズ制御のサポートもそれほど難しくありません。

  • NSImageクラスは、画像のサイズを設定するためのサポートを提供します(-setSize :)
  • NSImageRep(NSBitmapImageRepのスーパークラス)には-setAlpha:メソッドがあります

必要なときに電話してください。ココアの+1!

于 2011-07-04T16:16:36.760 に答える
2

NSImageから外側に向かって探索すると、NSBitmapImageRepが表示されます。これは、まさにあなたが望むことを実行します。

両方のプラットフォームで機能するソリューション(および現在のNSBitmapImageRepソリューションの背後にある実装)は、CGImageSourceを使用して画像を読み込み、CGImageDestinationを使用して画像を書き出すことであるため、これらのiPhoneの質問の一部も関連しています。

于 2011-07-04T04:08:13.573 に答える