32 #ifdef USE_IMAGEMAGICK 34 #include "../include/TextReader.h" 39 TextReader::TextReader() : width(1024), height(768), x_offset(0), y_offset(0), text(
""), font(
"Arial"), size(10.0), text_color(
"#ffffff"), background_color(
"#000000"), is_open(false), gravity(
GRAVITY_CENTER) {
46 TextReader::TextReader(
int width,
int height,
int x_offset,
int y_offset,
GravityType gravity, std::string text, std::string font,
double size, std::string text_color, std::string background_color)
47 : width(width), height(height), x_offset(x_offset), y_offset(y_offset), text(text), font(font), size(size), text_color(text_color), background_color(background_color), is_open(false), gravity(gravity)
55 text_background_color = color;
69 image = std::shared_ptr<Magick::Image>(
new Magick::Image(Magick::Geometry(width,height), Magick::Color(background_color)));
72 image->backgroundColor(Magick::Color(
"none"));
78 lines.push_back(Magick::DrawableGravity(Magick::NorthWestGravity));
81 lines.push_back(Magick::DrawableGravity(Magick::NorthGravity));
84 lines.push_back(Magick::DrawableGravity(Magick::NorthEastGravity));
87 lines.push_back(Magick::DrawableGravity(Magick::WestGravity));
90 lines.push_back(Magick::DrawableGravity(Magick::CenterGravity));
93 lines.push_back(Magick::DrawableGravity(Magick::EastGravity));
96 lines.push_back(Magick::DrawableGravity(Magick::SouthWestGravity));
99 lines.push_back(Magick::DrawableGravity(Magick::SouthGravity));
102 lines.push_back(Magick::DrawableGravity(Magick::SouthEastGravity));
107 lines.push_back(Magick::DrawableStrokeColor(Magick::Color(
"none")));
108 lines.push_back(Magick::DrawableStrokeWidth(0.0));
109 lines.push_back(Magick::DrawableFillColor(text_color));
110 lines.push_back(Magick::DrawableFont(font));
111 lines.push_back(Magick::DrawablePointSize(size));
112 lines.push_back(Magick::DrawableText(x_offset, y_offset, text));
114 if (!text_background_color.empty()) {
115 lines.push_back(Magick::DrawableTextUnderColor(Magick::Color(text_background_color)));
169 std::shared_ptr<Frame> image_frame(
new Frame(requested_frame, image->size().width(), image->size().height(),
"#000000", 0, 2));
172 std::shared_ptr<Magick::Image> copy_image(
new Magick::Image(*image.get()));
173 copy_image->modifyImage();
175 image_frame->AddMagickImage(copy_image);
181 std::shared_ptr<Frame> image_frame(
new Frame(1, 640, 480,
"#000000", 0, 2));
201 root[
"type"] =
"TextReader";
202 root[
"width"] = width;
203 root[
"height"] = height;
204 root[
"x_offset"] = x_offset;
205 root[
"y_offset"] = y_offset;
209 root[
"text_color"] = text_color;
210 root[
"background_color"] = background_color;
211 root[
"text_background_color"] = text_background_color;
212 root[
"gravity"] = gravity;
223 Json::CharReaderBuilder rbuilder;
224 Json::CharReader* reader(rbuilder.newCharReader());
227 bool success = reader->parse( value.c_str(),
228 value.c_str() + value.size(), &root, &errors );
233 throw InvalidJSON(
"JSON could not be parsed (or is invalid)");
240 catch (
const std::exception& e)
243 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)");
254 if (!root[
"width"].isNull())
255 width = root[
"width"].asInt();
256 if (!root[
"height"].isNull())
257 height = root[
"height"].asInt();
258 if (!root[
"x_offset"].isNull())
259 x_offset = root[
"x_offset"].asInt();
260 if (!root[
"y_offset"].isNull())
261 y_offset = root[
"y_offset"].asInt();
262 if (!root[
"text"].isNull())
263 text = root[
"text"].asString();
264 if (!root[
"font"].isNull())
265 font = root[
"font"].asString();
266 if (!root[
"size"].isNull())
267 size = root[
"size"].asDouble();
268 if (!root[
"text_color"].isNull())
269 text_color = root[
"text_color"].asString();
270 if (!root[
"background_color"].isNull())
271 background_color = root[
"background_color"].asString();
272 if (!root[
"text_background_color"].isNull())
273 text_background_color = root[
"text_background_color"].asString();
274 if (!root[
"gravity"].isNull())
285 #endif //USE_IMAGEMAGICK std::string Json()
Get and Set JSON methods.
int num
Numerator for the fraction.
Align clip to the right of its parent (middle aligned)
Align clip to the bottom right of its parent.
void Close()
Close Reader.
int width
The width of the video (in pixesl)
This class represents a single frame of video (i.e. image & audio data)
float duration
Length of time (in seconds)
Json::Value JsonValue()
Generate Json::JsonValue for this object.
void SetTextBackgroundColor(std::string color)
bool has_video
Determines if this file has a video stream.
int64_t file_size
Size of file (in bytes)
Align clip to the top right of its parent.
Align clip to the bottom left of its parent.
void SetJsonValue(Json::Value root)
Load Json::JsonValue into this object.
std::shared_ptr< openshot::Frame > GetFrame(int64_t requested_frame)
bool has_audio
Determines if this file has an audio stream.
int64_t video_length
The number of frames in the video stream.
int height
The height of the video (in pixels)
Align clip to the bottom center of its parent.
Align clip to the top left of its parent.
openshot::Fraction video_timebase
The video timebase determines how long each frame stays on the screen.
This class represents a fraction.
Align clip to the left of its parent (middle aligned)
TextReader()
Default constructor (blank text)
virtual Json::Value JsonValue()=0
Generate Json::JsonValue for this object.
virtual void SetJsonValue(Json::Value root)=0
Load Json::JsonValue into this object.
openshot::ReaderInfo info
Information about the current media file.
Align clip to the center of its parent (middle aligned)
std::string vcodec
The name of the video codec used to encode / decode the video stream.
void SetJson(std::string value)
Load JSON string into this object.
This namespace is the default namespace for all code in the openshot library.
Exception for invalid JSON.
openshot::Fraction display_ratio
The ratio of width to height of the video stream (i.e. 640x480 has a ratio of 4/3) ...
openshot::Fraction pixel_ratio
The pixel ratio of the video stream as a fraction (i.e. some pixels are not square) ...
Align clip to the top center of its parent.
int den
Denominator for the fraction.
void Open()
Open Reader - which is called by the constructor automatically.
openshot::Fraction fps
Frames per second, as a fraction (i.e. 24/1 = 24 fps)
GravityType
This enumeration determines how clips are aligned to their parent container.
double ToDouble()
Return this fraction as a double (i.e. 1/2 = 0.5)