未验证 提交 7cb86134 编写于 作者: LinuxSuRen's avatar LinuxSuRen 提交者: GitHub

Add more description in the readme file (#1)

* Update README.md

* Finish phase one of the video
上级 3cfdf28f
# jenkins-open-tutorial
This is an open tutorial for Jenkins
# Video
We use [openshot](https://github.com/OpenShot/openshot-qt) as the tool for video clip.
# Plugins for openshot
https://inkscape.org/
# Screen Record
https://www.nchsoftware.com/capture/index.html
此差异已折叠。
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.
# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy
def load_font(font_path):
""" Load a new TTF font into Blender, and return the font object """
# get the original list of fonts (before we add a new one)
original_fonts = bpy.data.fonts.keys()
# load new font
bpy.ops.font.open(filepath=font_path)
# get the new list of fonts (after we added a new one)
for font_name in bpy.data.fonts.keys():
if font_name not in original_fonts:
return bpy.data.fonts[font_name]
# no new font was added
return None
# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file
# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
'title': 'Oh Yeah! OpenShot!',
'extrude': 0.1,
'bevel_depth': 0.02,
'spacemode': 'CENTER',
'text_size': 1.5,
'width': 1.0,
'fontname': 'Bfont',
'color': [0.8, 0.8, 0.8],
'alpha': 1.0,
'output_path': '/tmp/',
'fps': 24,
'quality': 90,
'file_format': 'PNG',
'color_mode': 'RGBA',
'horizon_color': [0.57, 0.57, 0.57],
'resolution_x': 1920,
'resolution_y': 1080,
'resolution_percentage': 100,
'start_frame': 20,
'end_frame': 25,
'animation': True,
}
#BEGIN INJECTING PARAMS
params['file_name'] = u'TitleFileName'
params['Alongtimeago'] = u'A long time ago in a video\neditor far, far away...'
params['TitleSpaceMovie'] = u'open\nshot'
params['Episode'] = u'Episode IV'
params['EpisodeTitle'] = u'A NEW OPENSHOT'
params['MainText'] = u'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...'
params['start_frame'] = 1
params['end_frame'] = 210
params['animation_speed'] = u'1'
params['title'] = u'Title'
params['extrude'] = 0.1
params['bevel_depth'] = 0.02
params['fontname'] = u'Bfont'
params['spacemode'] = u'CENTER'
params['text_size'] = 1.0
params['width'] = 1.0
params['diffuse_color'] = [0.15294117647058825, 0.058823529411764705, 0.0, 1.0]
params['specular_color'] = [1.0, 1.0, 1.0]
params['specular_intensity'] = 0.5
params['use_alpha'] = u'Yes'
params['thickness'] = 0.01
params['title1'] = u'Title 1'
params['start_x'] = -2.4
params['start_z'] = 0.6
params['diffuse_color_bg'] = [0.8745098039215686, 0.8627450980392157, 0.9058823529411765, 1.0]
params['specular_color_bg'] = [1.0, 1.0, 1.0]
params['specular_intensity_bg'] = 0.5
params['alpha_bg'] = 0.733
params['sub_title'] = u'Sub Title'
params['resolution_x'] = 1280
params['resolution_y'] = 720
params['resolution_percentage'] = 50
params['quality'] = 100
params['file_format'] = u'PNG'
params['color_mode'] = u'RGBA'
params['alpha_mode'] = 1
params['animation'] = True
params['output_path'] = u'/Users/rick/Workspace/GitHub/jenkins-zh/jenkins-open-tutorial/template_assets/blender/6GD56836DN/TitleFileName'
#END INJECTING PARAMS
#ONLY RENDER 1 FRAME FOR PREVIEW
params['start_frame'] = 105
params['end_frame'] = 105
#END ONLY RENDER 1 FRAME FOR PREVIEW
# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
# ----------------------------------------------------------------------------
# Modify Text / Curve settings
#print (bpy.data.curves.keys())
text_object = bpy.data.curves["Title"]
text_object.extrude = params["extrude"]
text_object.bevel_depth = params["bevel_depth"]
text_object.body = params["title"]
text_object.align_x = params["spacemode"]
text_object.size = params["text_size"]
text_object.space_character = params["width"]
# Get font object
font = None
if params["fontname"] != "Bfont":
# Add font so it's available to Blender
font = load_font(params["fontname"])
else:
# Get default font
font = bpy.data.fonts["Bfont"]
text_object.font = font
text_object = bpy.data.curves["Subtitle"]
text_object.extrude = params["extrude"]
text_object.bevel_depth = params["bevel_depth"]
text_object.body = params["sub_title"]
text_object.align_x = params["spacemode"]
text_object.size = params["text_size"]
text_object.space_character = params["width"]
# set the font
text_object.font = font
# Change the material settings (color, alpha, etc...)
material_object = bpy.data.materials["Text"]
material_object.diffuse_color = params["diffuse_color"]
material_object.specular_color = params["specular_color"]
material_object.specular_intensity = params["specular_intensity"]
# Set the render options. It is important that these are set
# to the same values as the current OpenShot project. These
# params are automatically set by OpenShot
bpy.context.scene.render.filepath = params["output_path"]
bpy.context.scene.render.fps = params["fps"]
bpy.context.scene.render.image_settings.file_format = params["file_format"]
bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
bpy.context.scene.render.film_transparent = params["alpha_mode"]
bpy.data.worlds[0].color = params["horizon_color"]
bpy.context.scene.render.resolution_x = params["resolution_x"]
bpy.context.scene.render.resolution_y = params["resolution_y"]
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
bpy.context.scene.frame_start = params["start_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Animation Speed (use Blender's time remapping to slow or speed up animation)
animation_speed = int(params["animation_speed"]) # time remapping multiplier
new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
bpy.context.scene.frame_end = new_length
bpy.context.scene.render.frame_map_old = 1
bpy.context.scene.render.frame_map_new = animation_speed
if params["start_frame"] == params["end_frame"]:
bpy.context.scene.frame_start = params["end_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Render the current animation to the params["output_path"] folder
bpy.ops.render.render(animation=params["animation"])
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.
# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy
def load_font(font_path):
""" Load a new TTF font into Blender, and return the font object """
# get the original list of fonts (before we add a new one)
original_fonts = bpy.data.fonts.keys()
# load new font
bpy.ops.font.open(filepath=font_path)
# get the new list of fonts (after we added a new one)
for font_name in bpy.data.fonts.keys():
if font_name not in original_fonts:
return bpy.data.fonts[font_name]
# no new font was added
return None
# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file
# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
'title': 'Oh Yeah! OpenShot!',
'extrude': 0.1,
'bevel_depth': 0.02,
'spacemode': 'CENTER',
'text_size': 1.5,
'width': 1.0,
'fontname': 'Bfont',
'color': [0.8, 0.8, 0.8],
'alpha': 1.0,
'output_path': '/tmp/',
'fps': 24,
'quality': 90,
'file_format': 'PNG',
'color_mode': 'RGBA',
'horizon_color': [0.7, 0.7, 0.7],
'resolution_x': 1920,
'resolution_y': 1080,
'resolution_percentage': 100,
'start_frame': 20,
'end_frame': 25,
'animation': True,
'thickness': 0.015,
}
#BEGIN INJECTING PARAMS
params['file_name'] = u'TitleFileName'
params['Alongtimeago'] = u'A long time ago in a video\neditor far, far away...'
params['TitleSpaceMovie'] = u'open\nshot'
params['Episode'] = u'Episode IV'
params['EpisodeTitle'] = u'A NEW OPENSHOT'
params['MainText'] = u'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...'
params['start_frame'] = 1
params['end_frame'] = 250
params['animation_speed'] = u'1'
params['title'] = u'My Title'
params['extrude'] = 0.259
params['bevel_depth'] = 0.016
params['fontname'] = u'Bfont'
params['spacemode'] = u'CENTER'
params['text_size'] = 1.0
params['width'] = 1.0
params['diffuse_color'] = [0.0, 0.4549019607843137, 0.9058823529411765, 1.0]
params['specular_color'] = [0.0, 0.7411764705882353, 1.0]
params['specular_intensity'] = 0.5
params['use_alpha'] = u'Yes'
params['thickness'] = 0.01
params['resolution_x'] = 1280
params['resolution_y'] = 720
params['resolution_percentage'] = 50
params['quality'] = 100
params['file_format'] = u'PNG'
params['color_mode'] = u'RGBA'
params['alpha_mode'] = 1
params['animation'] = True
params['output_path'] = u'/Users/rick/Workspace/GitHub/jenkins-zh/jenkins-open-tutorial/template_assets/blender/9FX2M8V087/TitleFileName'
#END INJECTING PARAMS
#ONLY RENDER 1 FRAME FOR PREVIEW
params['start_frame'] = 125
params['end_frame'] = 125
#END ONLY RENDER 1 FRAME FOR PREVIEW
# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
# ----------------------------------------------------------------------------
# Modify Text / Curve settings
#print (bpy.data.curves.keys())
text_object = bpy.data.curves["Text"]
text_object.extrude = params["extrude"]
text_object.bevel_depth = params["bevel_depth"]
text_object.body = params["title"]
text_object.align_x = params["spacemode"]
text_object.size = params["text_size"]
text_object.space_character = params["width"]
# Get font object
font = None
if params["fontname"] != "Bfont":
# Add font so it's available to Blender
font = load_font(params["fontname"])
else:
# Get default font
font = bpy.data.fonts["Bfont"]
# set the font
text_object.font = font
# Change the material settings (color, alpha, etc...)
material_object = bpy.data.materials["Material.001"]
material_object.diffuse_color = params["diffuse_color"]
material_object.specular_color = params["specular_color"]
material_object.specular_intensity = params["specular_intensity"]
# Convert to mesh to apply effect
bpy.ops.object.convert(target='MESH', keep_original=False)
ActiveObjectText = bpy.context.view_layer.objects.active
# Add Wireframe modifier to new mesh
bpy.ops.object.modifier_add(type='WIREFRAME')
ActiveObjectText.modifiers['Wireframe'].use_even_offset = False
ActiveObjectText.modifiers['Wireframe'].thickness = params["thickness"]
# Set the render options. It is important that these are set
# to the same values as the current OpenShot project. These
# params are automatically set by OpenShot
bpy.context.scene.render.filepath = params["output_path"]
bpy.context.scene.render.fps = params["fps"]
bpy.context.scene.render.image_settings.file_format = params["file_format"]
bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
bpy.context.scene.render.film_transparent = params["alpha_mode"]
bpy.data.worlds[0].color = params["horizon_color"]
bpy.context.scene.render.resolution_x = params["resolution_x"]
bpy.context.scene.render.resolution_y = params["resolution_y"]
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
bpy.context.scene.frame_start = params["start_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Animation Speed (use Blender's time remapping to slow or speed up animation)
animation_speed = int(params["animation_speed"]) # time remapping multiplier
new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
bpy.context.scene.frame_end = new_length
bpy.context.scene.render.frame_map_old = 1
bpy.context.scene.render.frame_map_new = animation_speed
if params["start_frame"] == params["end_frame"]:
bpy.context.scene.frame_start = params["end_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Render the current animation to the params["output_path"] folder
bpy.ops.render.render(animation=params["animation"])
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.
# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy
def load_font(font_path):
""" Load a new TTF font into Blender, and return the font object """
# get the original list of fonts (before we add a new one)
original_fonts = bpy.data.fonts.keys()
# load new font
bpy.ops.font.open(filepath=font_path)
# get the new list of fonts (after we added a new one)
for font_name in bpy.data.fonts.keys():
if font_name not in original_fonts:
return bpy.data.fonts[font_name]
# no new font was added
return None
# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file
# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
'title': 'Oh Yeah! OpenShot!',
'extrude': 0.1,
'bevel_depth': 0.02,
'spacemode': 'LEFT',
'text_size': 1.5,
'width': 1.0,
'fontname': 'Bfont',
'color': [0.8, 0.8, 0.8],
'alpha': 1.0,
'output_path': '/tmp/',
'fps': 24,
'quality': 90,
'file_format': 'PNG',
'color_mode': 'RGBA',
'horizon_color': [0.57, 0.57, 0.57],
'resolution_x': 1920,
'resolution_y': 1080,
'resolution_percentage': 100,
'start_frame': 20,
'end_frame': 25,
'animation': True,
}
#BEGIN INJECTING PARAMS
params['file_name'] = u'TitleFileName'
params['Alongtimeago'] = u'A long time ago in a video\neditor far, far away...'
params['TitleSpaceMovie'] = u'open\nshot'
params['Episode'] = u'Episode IV'
params['EpisodeTitle'] = u'A NEW OPENSHOT'
params['MainText'] = u'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...'
params['start_frame'] = 1
params['end_frame'] = 180
params['animation_speed'] = u'1'
params['title'] = u'My Title'
params['extrude'] = 0.0
params['bevel_depth'] = 0.02
params['fontname'] = u'Bfont'
params['spacemode'] = u'CENTER'
params['text_size'] = 1.0
params['width'] = 1.0
params['diffuse_color'] = [1.0, 1.0, 1.0, 1.0]
params['specular_color'] = [1.0, 1.0, 1.0]
params['specular_intensity'] = 0.5
params['use_alpha'] = u'Yes'
params['thickness'] = 0.01
params['title1'] = u'Title 1'
params['start_x'] = -2.4
params['start_z'] = 0.6
params['diffuse_color_bg'] = [0.8745098039215686, 0.8627450980392157, 0.9058823529411765, 1.0]
params['specular_color_bg'] = [1.0, 1.0, 1.0]
params['specular_intensity_bg'] = 0.5
params['alpha_bg'] = 0.733
params['resolution_x'] = 1280
params['resolution_y'] = 720
params['resolution_percentage'] = 50
params['quality'] = 100
params['file_format'] = u'PNG'
params['color_mode'] = u'RGBA'
params['alpha_mode'] = 1
params['animation'] = True
params['output_path'] = u'/Users/rick/Workspace/GitHub/jenkins-zh/jenkins-open-tutorial/template_assets/blender/AL1PE2MZFW/TitleFileName'
#END INJECTING PARAMS
#ONLY RENDER 1 FRAME FOR PREVIEW
params['start_frame'] = 90
params['end_frame'] = 90
#END ONLY RENDER 1 FRAME FOR PREVIEW
# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
# ----------------------------------------------------------------------------
# TITLE 1 - Modify Text / Curve settings
text_object1 = bpy.data.curves["Title1"]
text_object1.extrude = params["extrude"]
text_object1.bevel_depth = params["bevel_depth"]
text_object1.body = params["title1"]
text_object1.align_x = params["spacemode"]
text_object1.size = params["text_size"]
text_object1.space_character = params["width"]
# Get font object
font = None
if params["fontname"] != "Bfont":
# Add font so it's available to Blender
font = load_font(params["fontname"])
else:
# Get default font
font = bpy.data.fonts["Bfont"]
text_object1.font = font
# TITLE - Change the material settings (color, alpha, etc...)
material_object1 = bpy.data.materials["Title.Material"]
material_object1.diffuse_color = params["diffuse_color"]
material_object1.specular_color = params["specular_color"]
material_object1.specular_intensity = params["specular_intensity"]
bpy.data.materials["Title.Material"].node_tree.nodes[1].inputs[0].default_value = params["diffuse_color"]
# GLASS - Change the material settings (color, alpha, etc...)
material_object2 = bpy.data.materials["Background.Material"]
material_object2.diffuse_color = params["diffuse_color_bg"]
material_object2.specular_color = params["specular_color_bg"]
material_object2.specular_intensity = params["specular_intensity_bg"]
bpy.data.materials["Background.Material"].node_tree.nodes[1].inputs[0].default_value = params["diffuse_color_bg"]
bpy.data.materials["Background.Material"].node_tree.nodes[1].inputs[18].default_value = params["alpha_bg"]
# ADJUST STARTING POSITION (Keyframes)
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[0].co = (40.0, params["start_x"])
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[0].handle_left.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[0].handle_right.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[1].co = (80.0, params["start_x"])
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[1].handle_left.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[1].handle_right.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[1].co = (80.0, params["start_z"])
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[1].handle_left.y = params["start_z"]
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[1].handle_right.y = params["start_z"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[2].co = (150.0, params["start_x"])
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[2].handle_left.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[2].handle_right.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[2].co = (150.0, params["start_z"])
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[2].handle_left.y = params["start_z"]
bpy.data.actions["TextAction"].fcurves[2].keyframe_points[2].handle_right.y = params["start_z"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[3].co = (190.0, params["start_x"])
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[3].handle_left.y = params["start_x"]
bpy.data.actions["TextAction"].fcurves[0].keyframe_points[3].handle_right.y = params["start_x"]
# Set the render options. It is important that these are set
# to the same values as the current OpenShot project. These
# params are automatically set by OpenShot
bpy.context.scene.render.filepath = params["output_path"]
bpy.context.scene.render.fps = params["fps"]
bpy.context.scene.render.image_settings.file_format = params["file_format"]
bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
bpy.context.scene.render.film_transparent = params["alpha_mode"]
bpy.context.scene.render.resolution_x = params["resolution_x"]
bpy.context.scene.render.resolution_y = params["resolution_y"]
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
bpy.context.scene.frame_start = params["start_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Animation Speed (use Blender's time remapping to slow or speed up animation)
animation_speed = int(params["animation_speed"]) # time remapping multiplier
new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
bpy.context.scene.frame_end = new_length
bpy.context.scene.render.frame_map_old = 1
bpy.context.scene.render.frame_map_new = animation_speed
if params["start_frame"] == params["end_frame"]:
bpy.context.scene.frame_start = params["end_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Render the current animation to the params["output_path"] folder
bpy.ops.render.render(animation=params["animation"])
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.
# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy
def load_font(font_path):
""" Load a new TTF font into Blender, and return the font object """
# get the original list of fonts (before we add a new one)
original_fonts = bpy.data.fonts.keys()
# load new font
bpy.ops.font.open(filepath=font_path)
# get the new list of fonts (after we added a new one)
for font_name in bpy.data.fonts.keys():
if font_name not in original_fonts:
return bpy.data.fonts[font_name]
# no new font was added
return None
# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file
# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
'title': 'Oh Yeah! OpenShot!',
'extrude': 0.1,
'bevel_depth': 0.02,
'spacemode': 'CENTER',
'text_size': 1.5,
'width': 1.0,
'fontname': 'Bfont',
'color': [0.8, 0.8, 0.8],
'alpha': 1.0,
'output_path': '/tmp/',
'fps': 24,
'quality': 90,
'file_format': 'PNG',
'color_mode': 'RGBA',
'horizon_color': [0.57, 0.57, 0.57],
'resolution_x': 1920,
'resolution_y': 1080,
'resolution_percentage': 100,
'start_frame': 20,
'end_frame': 25,
'animation': True,
}
#BEGIN INJECTING PARAMS
params['file_name'] = u'TitleFileName'
params['Alongtimeago'] = u'A long time ago in a video\neditor far, far away...'
params['TitleSpaceMovie'] = u'open\nshot'
params['Episode'] = u'Episode IV'
params['EpisodeTitle'] = u'A NEW OPENSHOT'
params['MainText'] = u'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...'
params['start_frame'] = 1
params['end_frame'] = 120
params['animation_speed'] = u'1'
params['title'] = u'My Title'
params['extrude'] = 0.1
params['bevel_depth'] = 0.02
params['fontname'] = u'Bfont'
params['spacemode'] = u'CENTER'
params['text_size'] = 1.0
params['width'] = 1.0
params['diffuse_color'] = [1.0, 1.0, 1.0, 1.0]
params['specular_color'] = [1.0, 1.0, 1.0]
params['specular_intensity'] = 0.5
params['use_alpha'] = u'Yes'
params['resolution_x'] = 1280
params['resolution_y'] = 720
params['resolution_percentage'] = 50
params['quality'] = 100
params['file_format'] = u'PNG'
params['color_mode'] = u'RGBA'
params['alpha_mode'] = 1
params['animation'] = True
params['output_path'] = u'/Users/rick/Workspace/GitHub/jenkins-zh/jenkins-open-tutorial/template_assets/blender/C7NRBSNRYP/TitleFileName'
#END INJECTING PARAMS
#ONLY RENDER 1 FRAME FOR PREVIEW
params['start_frame'] = 60
params['end_frame'] = 60
#END ONLY RENDER 1 FRAME FOR PREVIEW
# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
# ----------------------------------------------------------------------------
# Modify Text / Curve settings
#print (bpy.data.curves.keys())
text_object = bpy.data.curves["Text"]
text_object.extrude = params["extrude"]
text_object.bevel_depth = params["bevel_depth"]
text_object.body = params["title"]
text_object.align_x = params["spacemode"]
text_object.size = params["text_size"]
text_object.space_character = params["width"]
# Get font object
font = None
if params["fontname"] != "Bfont":
# Add font so it's available to Blender
font = load_font(params["fontname"])
else:
# Get default font
font = bpy.data.fonts["Bfont"]
text_object.font = font
# Change the material settings (color, alpha, etc...)
material_object = bpy.data.materials["Material"]
material_object.diffuse_color = params["diffuse_color"]
material_object.specular_color = params["specular_color"]
material_object.specular_intensity = params["specular_intensity"]
# Set the render options. It is important that these are set
# to the same values as the current OpenShot project. These
# params are automatically set by OpenShot
bpy.context.scene.render.filepath = params["output_path"]
bpy.context.scene.render.fps = params["fps"]
bpy.context.scene.render.image_settings.file_format = params["file_format"]
if params["use_alpha"] == "No":
bpy.context.scene.render.image_settings.color_mode = "RGB"
else:
bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
bpy.context.scene.render.film_transparent = params["alpha_mode"]
bpy.context.scene.render.resolution_x = params["resolution_x"]
bpy.context.scene.render.resolution_y = params["resolution_y"]
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
bpy.context.scene.frame_start = params["start_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Animation Speed (use Blender's time remapping to slow or speed up animation)
animation_speed = int(params["animation_speed"]) # time remapping multiplier
new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
bpy.context.scene.frame_end = new_length
bpy.context.scene.render.frame_map_old = 1
bpy.context.scene.render.frame_map_new = animation_speed
if params["start_frame"] == params["end_frame"]:
bpy.context.scene.frame_start = params["end_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Render the current animation to the params["output_path"] folder
bpy.ops.render.render(animation=params["animation"])
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.
# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy
def load_font(font_path):
""" Load a new TTF font into Blender, and return the font object """
# get the original list of fonts (before we add a new one)
original_fonts = bpy.data.fonts.keys()
# load new font
bpy.ops.font.open(filepath=font_path)
# get the new list of fonts (after we added a new one)
for font_name in bpy.data.fonts.keys():
if font_name not in original_fonts:
return bpy.data.fonts[font_name]
# no new font was added
return None
# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file
# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
'title': 'Oh Yeah! OpenShot!',
'Alongtimeago': 'Some cycles ago, in The Grid\nfar, far inside....',
'Episode': 'Episode I.V',
'EpisodeTitle': 'A NEW OPENSHOT',
'TitleSpaceMovie': 'Space\nMovie',
'MainText': 'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...',
'extrude': 0.1,
'bevel_depth': 0.02,
'spacemode': 'CENTER',
'text_size': 1.5,
'width': 1.0,
'fontname': 'Bfont',
'color': [0.8, 0.8, 0.8],
'alpha': 1.0,
'output_path': '/tmp/',
'fps': 24,
'quality': 90,
'file_format': 'PNG',
'color_mode': 'RGBA',
'horizon_color': [0.0, 0.0, 0.0],
'resolution_x': 1920,
'resolution_y': 1080,
'resolution_percentage': 100,
'start_frame': 1,
'end_frame': 2232,
'animation': True,
}
#BEGIN INJECTING PARAMS
params['file_name'] = u'TitleFileName'
params['Alongtimeago'] = u'A long time ago in a video\neditor far, far away...'
params['TitleSpaceMovie'] = u'open\nshot'
params['Episode'] = u'Episode IV'
params['EpisodeTitle'] = u'A NEW OPENSHOT'
params['MainText'] = u'It is a period of software war. Free software developers have won some battles with free, and open-source applications. They leave the source code available for everybody in the Galaxy, allowing people to access software knowledge and truth.\n\nBut the EULA Galactic Empire is not dead and prepares its revenge with an ultimate weapon: the blue screen of DEATH. This armored system can anihilate an entire device by a simple segfault.\n\nBut the rebel hackers have a secret weapon too: an atomic penguin which protects them from almost all digital injuries...'
params['start_frame'] = 1
params['end_frame'] = 2232
params['animation_speed'] = u'1'
params['resolution_x'] = 1280
params['resolution_y'] = 720
params['resolution_percentage'] = 50
params['quality'] = 100
params['file_format'] = u'PNG'
params['color_mode'] = u'RGBA'
params['alpha_mode'] = 1
params['animation'] = True
params['output_path'] = u'/Users/rick/Workspace/GitHub/jenkins-zh/jenkins-open-tutorial/template_assets/blender/LSQTIYN8T3/TitleFileName'
#END INJECTING PARAMS
#ONLY RENDER 1 FRAME FOR PREVIEW
params['start_frame'] = 1116
params['end_frame'] = 1116
#END ONLY RENDER 1 FRAME FOR PREVIEW
# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
# ----------------------------------------------------------------------------
# Modify Text / Curve settings
#print (bpy.data.curves.keys())
bpy.data.objects['Alongtimeago'].data.body = params['Alongtimeago']
bpy.data.objects['Episode'].data.body = params['Episode']
bpy.data.objects['EpisodeTitle'].data.body = params['EpisodeTitle']
bpy.data.objects['TitleSpaceMovie'].data.body = params['TitleSpaceMovie']
bpy.data.objects['MainText'].data.body = params['MainText']
# Set the render options. It is important that these are set
# to the same values as the current OpenShot project. These
# params are automatically set by OpenShot
bpy.context.scene.render.filepath = params["output_path"]
bpy.context.scene.render.fps = params["fps"]
bpy.context.scene.render.image_settings.file_format = params["file_format"]
bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
bpy.context.scene.render.film_transparent = params["alpha_mode"]
bpy.data.worlds[0].color = params["horizon_color"]
bpy.context.scene.render.resolution_x = params["resolution_x"]
bpy.context.scene.render.resolution_y = params["resolution_y"]
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
bpy.context.scene.frame_start = params["start_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Animation Speed (use Blender's time remapping to slow or speed up animation)
animation_speed = int(params["animation_speed"]) # time remapping multiplier
new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
bpy.context.scene.frame_end = new_length
bpy.context.scene.render.frame_map_old = 1
bpy.context.scene.render.frame_map_new = animation_speed
if params["start_frame"] == params["end_frame"]:
bpy.context.scene.frame_start = params["end_frame"]
bpy.context.scene.frame_end = params["end_frame"]
# Render the current animation to the params["output_path"] folder
bpy.ops.render.render(animation=params["animation"])
此差异已折叠。
<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="1080" id="svg2383" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" sodipodi:docname="Gold_2.svg" sodipodi:version="0.32" version="1.0" width="1920" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs id="defs2385">
<linearGradient id="linearGradient3684" inkscape:collect="always">
<stop id="stop3686" offset="0" style="stop-color:#dea436;stop-opacity:1"/>
<stop id="stop3688" offset="1" style="stop-color:#f8c050;stop-opacity:1"/>
</linearGradient>
<linearGradient id="linearGradient3670" inkscape:collect="always">
<stop id="stop3672" offset="0" style="stop-color:#dcaa38;stop-opacity:1"/>
<stop id="stop3674" offset="1" style="stop-color:#f4c54f;stop-opacity:1"/>
</linearGradient>
<linearGradient id="linearGradient3182" inkscape:collect="always">
<stop id="stop3184" offset="0" style="stop-color:#ffffff;stop-opacity:0.55"/>
<stop id="stop3186" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
</linearGradient>
<linearGradient id="linearGradient3174" inkscape:collect="always">
<stop id="stop3176" offset="0" style="stop-color:#324da7;stop-opacity:0.55"/>
<stop id="stop3178" offset="1" style="stop-color:#324da7;stop-opacity:0;"/>
</linearGradient>
<linearGradient id="linearGradient3190" inkscape:collect="always">
<stop id="stop3192" offset="0" style="stop-color:#324da7;stop-opacity:1"/>
<stop id="stop3194" offset="1" style="stop-color:#324da7;stop-opacity:0;"/>
</linearGradient>
<linearGradient id="linearGradient3267" inkscape:collect="always">
<stop id="stop3269" offset="0" style="stop-color:#0000ff;stop-opacity:0"/>
<stop id="stop3275" offset="0.48768985" style="stop-color:#ffffff;stop-opacity:1"/>
<stop id="stop3271" offset="1" style="stop-color:#0000ff;stop-opacity:0;"/>
</linearGradient>
<inkscape:perspective id="perspective2391" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" sodipodi:type="inkscape:persp3d"/>
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72844,-354.23847)" gradientUnits="userSpaceOnUse" id="linearGradient3273" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72845,-255.93349)" gradientUnits="userSpaceOnUse" id="linearGradient3463" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
<linearGradient gradientTransform="translate(-480.00173,0)" gradientUnits="userSpaceOnUse" id="linearGradient3196" inkscape:collect="always" x1="1917.6716" x2="1622.8263" xlink:href="#linearGradient3190" y1="542.59882" y2="542.59882"/>
<linearGradient gradientTransform="matrix(-1,0,0,1,1920.0025,7.77e-2)" gradientUnits="userSpaceOnUse" id="linearGradient3200" inkscape:collect="always" x1="1917.6716" x2="1622.8263" xlink:href="#linearGradient3190" y1="542.59882" y2="542.59882"/>
<linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3180" inkscape:collect="always" x1="513.01154" x2="513.01154" xlink:href="#linearGradient3174" y1="-540.84637" y2="-636.17462"/>
<linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3188" inkscape:collect="always" x1="719.99805" x2="719.99805" xlink:href="#linearGradient3182" y1="-540.84637" y2="-631.5105"/>
<linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3197" inkscape:collect="always" x1="513.01154" x2="513.01154" xlink:href="#linearGradient3174" y1="-540.84637" y2="-636.17462"/>
<linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3199" inkscape:collect="always" x1="719.99805" x2="719.99805" xlink:href="#linearGradient3182" y1="-540.84637" y2="-631.5105"/>
<linearGradient gradientTransform="translate(240.00003,-1.7053223)" gradientUnits="userSpaceOnUse" id="linearGradient2841" inkscape:collect="always" x1="513.01154" x2="513.01154" xlink:href="#linearGradient3174" y1="-540.84637" y2="-636.17462"/>
<linearGradient gradientTransform="translate(240.00003,-1.7053223)" gradientUnits="userSpaceOnUse" id="linearGradient2843" inkscape:collect="always" x1="719.99805" x2="719.99805" xlink:href="#linearGradient3182" y1="-540.84637" y2="-631.5105"/>
<inkscape:perspective id="perspective2855" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d"/>
<radialGradient cx="922.56451" cy="413.05423" fx="922.56451" fy="413.05423" gradientTransform="matrix(1,0,0,0.05818239,-200.15315,389.02172)" gradientUnits="userSpaceOnUse" id="radialGradient3654" inkscape:collect="always" r="638.25861" xlink:href="#linearGradient3670"/>
<inkscape:perspective id="perspective3664" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d"/>
<radialGradient cx="959.99805" cy="514.13556" fx="959.99805" fy="514.13556" gradientTransform="matrix(1,0,0,0.04078534,0,493.16635)" gradientUnits="userSpaceOnUse" id="radialGradient3682" inkscape:collect="always" r="781.3515" xlink:href="#linearGradient3684"/>
<filter height="1.5" id="filter3984" inkscape:label="Drop shadow" width="1.5" x="-.25" y="-.25">
<feGaussianBlur id="feGaussianBlur3986" in="SourceAlpha" result="blur" stdDeviation="1.000000"/>
<feOffset dx="0.000000" dy="4.000000" id="feOffset3990" in="bluralpha" result="offsetBlur"/>
<feMerge id="feMerge3992">
<feMergeNode id="feMergeNode3994" in="offsetBlur"/>
<feMergeNode id="feMergeNode3996" in="SourceGraphic"/>
</feMerge>
</filter>
<filter height="1.5" id="filter3998" inkscape:label="Drop shadow" width="1.5" x="-.25" y="-.25">
<feGaussianBlur id="feGaussianBlur4000" in="SourceAlpha" result="blur" stdDeviation="1.000000"/>
<feOffset dx="0.000000" dy="4.000000" id="feOffset4004" in="bluralpha" result="offsetBlur"/>
<feMerge id="feMerge4006">
<feMergeNode id="feMergeNode4008" in="offsetBlur"/>
<feMergeNode id="feMergeNode4010" in="SourceGraphic"/>
</feMerge>
</filter>
<radialGradient cx="959.99805" cy="514.13556" fx="959.99805" fy="514.13556" gradientTransform="matrix(1,0,0,0.04078534,-398.1953,493.16635)" gradientUnits="userSpaceOnUse" id="radialGradient3039" inkscape:collect="always" r="781.3515" xlink:href="#linearGradient3684"/>
</defs>
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" id="base" inkscape:current-layer="layer1" inkscape:cx="390.17664" inkscape:cy="458.30763" inkscape:document-units="px" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="1056" inkscape:window-maximized="1" inkscape:window-width="1855" inkscape:window-x="65" inkscape:window-y="24" inkscape:zoom="0.5" objecttolerance="10" pagecolor="#ffffff" showgrid="false"/>
<metadata id="metadata2388">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(1.9328e-3,0)">
<rect height="1080.0051" id="rect3160" rx="0" ry="0" style="opacity:0;fill:#e0e7ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="1920" x="-0.0019328" y="-0.0051269531"/>
<text id="text2395" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:url(#radialGradient3654);fill-opacity:1;stroke:none;filter:url(#filter3998)" x="961.7674" xml:space="preserve" y="438.48804"><tspan id="tspan2397" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:82.35334778px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Sans Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:url(#radialGradient3654);fill-opacity:1;stroke:none" x="961.7674" y="438.48804">Jenkins 在 Tomcat 下的使用</tspan></text>
<text id="text2395-6" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:url(#radialGradient3039);fill-opacity:1;stroke:none;filter:url(#filter3984)" x="959.01288" xml:space="preserve" y="544.8371"><tspan id="tspan2397-3" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:82.35334778px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Sans Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:url(#radialGradient3039);fill-opacity:1;stroke:none" x="959.01288" y="544.8371">Jenkins 中文社区</tspan></text>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" ?><svg height="1080" id="svg2383" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="1.0.1 (c497b03c, 2020-09-10)" sodipodi:docname="temp.svg" sodipodi:version="0.32" version="1.0" width="1920" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs id="defs2385">
<linearGradient id="linearGradient3267" inkscape:collect="always">
<stop id="stop3269" offset="0" style="stop-color:#0000ff;stop-opacity:0"/>
<stop id="stop3275" offset="0.48768985" style="stop-color:#ffffff;stop-opacity:1"/>
<stop id="stop3271" offset="1" style="stop-color:#0000ff;stop-opacity:0;"/>
</linearGradient>
<inkscape:perspective id="perspective2391" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" sodipodi:type="inkscape:persp3d"/>
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72844,-354.23847)" gradientUnits="userSpaceOnUse" id="linearGradient3273" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72845,-255.93349)" gradientUnits="userSpaceOnUse" id="linearGradient3463" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
<inkscape:perspective id="perspective2621" inkscape:persp3d-origin="151.522 : 24.125 : 1" inkscape:vp_x="0 : 36.1875 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="303.04401 : 36.1875 : 1" sodipodi:type="inkscape:persp3d"/>
</defs>
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" id="base" inkscape:current-layer="layer1" inkscape:cx="922.60352" inkscape:cy="531.68831" inkscape:document-rotation="0" inkscape:document-units="px" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="934" inkscape:window-maximized="0" inkscape:window-width="1680" inkscape:window-x="64" inkscape:window-y="23" inkscape:zoom="0.48125" objecttolerance="10" pagecolor="#ffffff" showgrid="false"/>
<metadata id="metadata2388">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
<rect height="1079.8783" id="rect3160" rx="0" ry="0" style="fill:#000000;fill-opacity:1;stroke:none" width="1918.3669" x="0.81652832" y="0.062805362"/>
<rect height="239.97296" id="rect3420" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="1921.8118" x="-0.062797897" y="84.424576"/>
<g i:extraneous="self" id="g1830" transform="matrix(1.9983927,0,0,1.8747888,658.04363,127.19226)">
<g i:dimmedPercent="100" i:layer="yes" i:rgbTrio="#4F008000FFFF" id="g1788" style="display:inline"/>
<text id="text30" style="font-style:normal;font-weight:normal;font-size:41.3308px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.516635" transform="scale(0.9685806,1.0324386)" x="-62.998287" xml:space="preserve" y="43.787769"><tspan id="tspan28" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:41.3308px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.516635" x="-62.998287" y="43.787769">Jenkins 中文系列教程</tspan></text>
</g>
<text id="text2395-6" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.78179px;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.731816" transform="scale(1.1281854,0.88637912)" x="848.08313" xml:space="preserve" y="533.84314"><tspan id="tspan3428-2" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.9942px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.731816" x="848.08313" y="533.84314">合作社区</tspan></text>
<text id="text2395-1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" transform="scale(1.0324386,0.9685806)" x="929.99048" xml:space="preserve" y="654.85101"><tspan id="tspan3428-8" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" x="929.99048" y="654.85101">Kubesphere</tspan></text>
<text id="text2395-1-2" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" transform="scale(1.0324386,0.9685806)" x="928.93573" xml:space="preserve" y="743.25464"><tspan id="tspan3428-8-8" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" x="928.93573" y="743.25464">DevOps 中国</tspan></text>
<text id="text2395-1-2-2" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" transform="scale(1.0324386,0.9685806)" x="926.90088" xml:space="preserve" y="840.73767"><tspan id="tspan3428-8-8-1" sodipodi:role="line" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;line-height:125%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" x="926.90088" y="840.73767">TesterHome</tspan></text>
<text id="text2395-1-2-2-7" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" transform="scale(1.0324386,0.9685806)" x="929.73529" xml:space="preserve" y="1006.683"/>
</g>
</svg>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册