|
近期帮盆友解决一个.CR2图片的格式转jpg。由于他是用C 程序编写的,要我写个python脚本制作,将cr2格式变为jpg格式,因此 会牵涉到C 启用python函数,下边给大伙儿共享一下全过程。
最先大家写一个CR2CVTJPG.py的文档
import numpy as np
from PIL import Image
from rawkit.raw import Raw
from rawkit.options import WhiteBalance
import os.path
import glob
def cr2cvtjpg():
basepath=os.path.dirname(os.path.abspath(r\“C:UsersLeowenAnaconda3Libsite-packagesLibRaw-0.18.13inlibraw.dll\“))
os.environ[\“PATH\“]=basepath os.pathsep os.environ[\“PATH\“]
# 获得照片
imagePaths=glob.glob(“C:\Users\Leowen\Desktop\image“ “\*.CR2“)
# 循环系统解决单独照片
for (i,imagePath) in enumerate(imagePaths):
with Raw(filename=imagePath) as raw:
raw.options.white_balance=WhiteBalance(camera=False, auto=True)
outputpath=“C:\Users\Leowen\Desktop\“ str(i) “.ppm“
raw.save(filename=outputpath)
img=Image.open(outputpath)
jpgoutputpath=“C:\Users\Leowen\Desktop\“ str(i) “.jpg“
img.save(jpgoutputpath)
这一python程序流程就无需多言了,它是python的专业知识,大家这儿关键将C 启用python函数。
我就用anaconda3安裝的python36。VS在线编辑器用的是VS2015.
最先大家新创建一个新项目
随后新创建一个main.cpp文件。在大家特性管理工具中,改动大家的新项目的解决方法服务平台x64。
main.cpp內容为:
#include
#include
int main(int argc, char* argv[])
{ // init python
Py_SetPythonHome(L“C:\Users\Leowen\Anaconda3“);
Py_Initialize();
if (!Py_IsInitialized())
return -1;
const char *scriptDirectoryName=“C:\Users\Leowen\Desktop\20181130test\ConsoleApplication1\ConsoleApplication1“;
Py_Initialize();
PyObject *sysPath=PySys_GetObject(“path“);
PyObject *path=PyUnicode_FromString(scriptDirectoryName);
int result=PyList_Insert(sysPath, 0, path);
PyObject *pModule=PyImport_ImportModule(“CR2CVTJPG“);
// load python script
if (!pModule)
{
std::cout<< “can\“t find CR2CVTJPG.py“ << std::endl;
return -1;
}
//
PyObject* pDict=PyModule_GetDict(pModule);
if (!pDict) { return -1; }
// get “add“ function
PyObject* pFunc=PyDict_GetItemString(pDict, “cr2cvtjpg“);
if (!pFunc || !PyCallable_Check(pFunc))
{
std::cout<< “can\“t find function [cr2cvtjpg]“ << std::endl;
return -1;
}
// parameter
//PyObject *pArgs=PyTuple_New(2); //2个主要参数
//PyTuple_SetItem(pArgs, 0, Py_BuildValue(“l“, 3));
//PyTuple_SetItem(pArgs, 1, Py_BuildValue(“l“, 4));
// call python script
//PyObject_CallObject(pFunc, pArgs);//调用函数
PyObject_CallObject(pFunc,NULL);//调用函数
//
//Py_DECREF(pName);
//Py_DECREF(pArgs);//复印启用信息内容
Py_DECREF(pModule);
// close python
Py_Finalize();
return 0;
}
然后大家配备新项目特性
将python的头文件(例如C:UsersLeowenAnaconda3include)加上到, 新项目特性页->VC 文件目录->包括文件目录。
将python.lib文件(例如C:UsersLeowenAnaconda3libs)加上到,配备->连接器->键入->额外依靠项。
接下去改动pyconfig.h文件。
寻找C:UsersLeowenAnaconda3includepyconfig.h文件,打开文件,检索python36_d.lib,将
# if defined(_DEBUG)
# pragma comment(lib,“python36_d.lib“)
改动为:
# if defined(_DEBUG)
# pragma comment(lib,“python36.lib“)
再检索Py_DEBUG,将
#ifdef _DEBUG
# define Py_DEBUG
#endif
改动为:
#ifdef _DEBUG
//# define Py_DEBUG
#endif
接下去,将大家的python脚本制作拷到大家新项目文档中
形成解决方法:
运作結果
(责任编辑:网络) |
|