[C++] 54 FLTK : 画像加工アプリ / iOSアプリ用iconset作成機能の実装 appiconset

とりあえずmacOSアプリとiOSアプリに必要なアイコン類を作成できるようにしました。画像処理ライブラリとしてOpenCV(開発はインテル)を使っています。用意するのは2048*2048のpngファイルだけです。

iOSに必要なContents.jsonは前もってホームディレクトリに配置したものをコピーしました。

iOS
macOS
#include <opencv2/opencv.hpp>

void makeIcnsIOS(const char* filename){
	// AppIcon.appiconsetパス作成
	string path_str = string(filename);
	char del = '/';
	vector<string> list = split(path_str, del);
	string imagename = list.back(); 
	list.pop_back();

	const char* del2 = "/";
	string prefix = join(list,del2);
	string dir = prefix + "/" + "AppIcon.appiconset";

	cout<<"dir "<<dir<<endl;

	// iconsetディレクトリ作成
	mkdir(dir.c_str(),
		S_IRUSR | S_IWUSR | S_IXUSR |  // USR RWX
		S_IRGRP | S_IWGRP | S_IXGRP |  // GRP RWX
		S_IROTH | S_IWOTH | S_IXOTH);  // OTH RWX

	// 各種pngファイル作成
	int pixels[19] = {20, 29, 40, 50, 57, 58, 60, 72, 76, 80, 87, 100, 114, 120, 144, 152, 167, 180, 1024};
	string filenames[19] = {"20.png","29.png","40.png","50.png","57.png","58.png","60.png","72.png","76.png","80.png","87.png","100.png","114.png","120.png","144.png","152.png","167.png","180.png","1024.png"};
	
	int num = 0;
	for (int pixel:pixels){
		cv::Mat img,img_resize;
		img = cv::imread(filename,cv::IMREAD_UNCHANGED);
		cv::resize(img,img_resize, cv::Size(pixel,pixel),0,0,cv::INTER_LINEAR);
		// リサイズファイルパス作成
		string filename2 = filenames[num];
		string filepath = dir + "/" + filename2;
		cv::imwrite(filepath, img_resize);

		num += 1;
	}

	// JSONファイルコピー
	std::string jsonname1 = "/Users/[ユーザID]/ImageInspector/Contents.json";
    std::string jsonname2 = prefix + "/AppIcon.appiconset/Contents.json";
	system(("cp " + jsonname1 + " " + jsonname2).c_str());
}