]> git.sesse.net Git - casparcg/blob - test/psd-test/psd-test.cpp
* psd: support for extracting scaling-data of text-layer, and extracting sheet-color...
[casparcg] / test / psd-test / psd-test.cpp
1 // psd-test.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include "../../modules/psd/doc.h"
6 #include "../../modules/psd/layer.h"
7 #include "../../common/utf.h"
8
9 #include <sstream>
10 #include <iostream>
11
12 #include <boost/property_tree/ptree.hpp>
13 #include <boost/property_tree/detail/file_parser_error.hpp>
14 #include <boost/property_tree/xml_parser.hpp>
15
16
17 int _tmain(int argc, _TCHAR* argv[])
18 {
19         if(argc > 1)
20         {
21                 caspar::psd::psd_document doc;
22                 if(doc.parse(argv[1]))
23                 {
24                         std::wstringstream trace;
25
26                         trace << L"<doc filename='" << doc.filename() << L"' color_mode='" << caspar::psd::color_mode_to_string(doc.color_mode()) << L"' color_depth='" << doc.color_depth() << L"' channel_count='" << doc.channels_count() << L"' width='" << doc.width() << L"' height='" << doc.height() << L"'>" << std::endl;
27                         if(doc.has_timeline())
28                         {
29                                 trace << L"<timeline>" << std::endl;
30                                         boost::property_tree::xml_writer_settings<wchar_t> w(' ', 3);
31                                         boost::property_tree::write_xml(trace, doc.timeline(), w);
32
33                                 trace << L"</timeline>" << std::endl;
34
35                         }
36         
37                         auto end = doc.layers().end();
38                         for(auto it = doc.layers().begin(); it != end; ++it)
39                         {
40                                 caspar::psd::layer_ptr layer = (*it);
41                                 trace << L"     <layer name='" << layer->name() << L"' opacity='" << layer->opacity() << L"' visible='" << layer->is_visible() << L"' protected='" << layer->is_position_protected() << L"'>" << std::endl;
42                                 if(layer->bitmap())
43                                         trace << L"             <bounding-box x='" << layer->location().x << L"' y='" << layer->location().y << L"' width='" << layer->bitmap()->width() << L"' height='" << layer->bitmap()->height() << L"' />" << std::endl;
44                                 //if(layer->mask())
45                                 //      trace << L"             <mask default-value='" << layer->mask_info().default_value_ << L"' enabled=" << layer->mask_info().enabled() << L" linked=" << layer->mask_info().linked() << L" inverted=" << layer->mask_info().inverted() << L" left='" << layer->mask_info().rect_.left << L"' top='" << layer->mask_info().rect_.top << "' right='" << layer->mask_info().rect_.right << "' bottom='" << layer->mask_info().rect_.bottom << "' />" << std::endl;
46                                 if(layer->is_text())
47                                 {
48                                         trace << L"                     <text value='" << (*it)->text_data().get(L"EngineDict.Editor.Text", L"") << L"' />" << std::endl;
49                                         boost::property_tree::xml_writer_settings<wchar_t> w(' ', 3);
50                                         boost::property_tree::write_xml(trace, (*it)->text_data(), w);
51                                 }
52                                 if(layer->has_timeline())
53                                 {
54                                         trace << L"                     <timeline>" << std::endl;
55                                         boost::property_tree::xml_writer_settings<wchar_t> w(' ', 3);
56                                         boost::property_tree::write_xml(trace, (*it)->timeline_data(), w);
57                                         trace << L"                     </timeline>" << std::endl;
58                                 }
59                                 trace << L"     </layer>" << std::endl;
60                         }
61
62                         trace << L"</doc>" << std::endl;
63         
64                         std::ofstream log("psd-log.txt");
65                         log << caspar::u8(trace.str());
66                         std::cout << caspar::u8(trace.str());
67                 }
68         }
69         return 0;
70 }
71