@ -18,19 +18,39 @@ namespace MediaBrowser.Server.Implementations.UserViews
_appPaths = appPaths ;
}
public Stream BuildSquareCollage ( IEnumerable < string > paths , string text , int width , int heigh t)
public Stream BuildSquareCollage ( IEnumerable < string > paths , int width , int height , bool renderWithText , string tex t)
{
using ( var wand = BuildSquareCollageWand ( paths , width , height ) )
if ( renderWithText )
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
using ( var wand = BuildSquareCollageWandWithText ( paths , text , width , height ) )
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
}
}
else
{
using ( var wand = BuildSquareCollageWand ( paths , width , height ) )
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
}
}
}
public Stream BuildThumbCollage ( IEnumerable < string > paths , string text , int width , int height )
public Stream BuildThumbCollage ( IEnumerable < string > paths , int width , int height , bool renderWithText , string tex t)
{
using ( var wand = BuildThumbCollageWand ( paths , width , height ) )
if ( renderWithText )
{
using ( var wand = BuildThumbCollageWandWithText ( paths , text , width , height ) )
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
}
}
else
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
using ( var wand = BuildThumbCollageWand ( paths , width , height ) )
{
return DynamicImageHelpers . GetStream ( wand , _appPaths ) ;
}
}
}
@ -68,7 +88,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
{
draw . FillColor = fcolor ;
draw . Font = MontserratLightFont ;
draw . FontSize = 5 0;
draw . FontSize = 6 0;
draw . FontWeight = FontWeightType . LightStyle ;
draw . TextAntialias = true ;
}
@ -192,7 +212,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
var iSlice = Convert . ToInt32 ( width * 0.2333333334 ) ;
int iTrans = Convert . ToInt32 ( height * . 25 ) ;
int iHeight = Convert . ToInt32 ( height * . 65 ) ;
var horizontalImagePadding = Convert . ToInt32 ( width * 0.0 1 25 ) ;
var horizontalImagePadding = Convert . ToInt32 ( width * 0.0 2) ;
foreach ( var element in wandImages . ImageList )
{
@ -236,6 +256,75 @@ namespace MediaBrowser.Server.Implementations.UserViews
}
}
private MagickWand BuildSquareCollageWandWithText ( IEnumerable < string > paths , string label , int width , int height )
{
var inputPaths = ProjectPaths ( paths , 4 ) ;
using ( var wandImages = new MagickWand ( inputPaths ) )
{
var wand = new MagickWand ( width , height ) ;
wand . OpenImage ( "gradient:#111111-#111111" ) ;
using ( var draw = new DrawingWand ( ) )
{
using ( var fcolor = new PixelWand ( ColorName . White ) )
{
draw . FillColor = fcolor ;
draw . Font = MontserratLightFont ;
draw . FontSize = 60 ;
draw . FontWeight = FontWeightType . LightStyle ;
draw . TextAntialias = true ;
}
var fontMetrics = wand . QueryFontMetrics ( draw , label ) ;
var textContainerY = Convert . ToInt32 ( height * . 165 ) ;
wand . CurrentImage . AnnotateImage ( draw , ( width - fontMetrics . TextWidth ) / 2 , textContainerY , 0.0 , label ) ;
var iSlice = Convert . ToInt32 ( width * 0.2333333334 ) ;
int iTrans = Convert . ToInt32 ( height * 0.2 ) ;
int iHeight = Convert . ToInt32 ( height * 0.46296296296296296296296296296296 ) ;
var horizontalImagePadding = Convert . ToInt32 ( width * 0.02 ) ;
foreach ( var element in wandImages . ImageList )
{
int iWidth = ( int ) Math . Abs ( iHeight * element . Width / element . Height ) ;
element . Gravity = GravityType . CenterGravity ;
element . BackgroundColor = new PixelWand ( "none" , 1 ) ;
element . ResizeImage ( iWidth , iHeight , FilterTypes . LanczosFilter ) ;
int ix = ( int ) Math . Abs ( ( iWidth - iSlice ) / 2 ) ;
element . CropImage ( iSlice , iHeight , ix , 0 ) ;
element . ExtentImage ( iSlice , iHeight , 0 - horizontalImagePadding , 0 ) ;
}
wandImages . SetFirstIterator ( ) ;
using ( var wandList = wandImages . AppendImages ( ) )
{
wandList . CurrentImage . TrimImage ( 1 ) ;
using ( var mwr = wandList . CloneMagickWand ( ) )
{
mwr . CurrentImage . ResizeImage ( wandList . CurrentImage . Width , ( wandList . CurrentImage . Height / 2 ) , FilterTypes . LanczosFilter , 1 ) ;
mwr . CurrentImage . FlipImage ( ) ;
mwr . CurrentImage . AlphaChannel = AlphaChannelType . DeactivateAlphaChannel ;
mwr . CurrentImage . ColorizeImage ( ColorName . Black , ColorName . Grey60 ) ;
using ( var mwg = new MagickWand ( wandList . CurrentImage . Width , iTrans ) )
{
mwg . OpenImage ( "gradient:black-none" ) ;
var verticalSpacing = Convert . ToInt32 ( height * 0.01111111111111111111111111111111 ) ;
mwr . CurrentImage . CompositeImage ( mwg , CompositeOperator . DstInCompositeOp , 0 , verticalSpacing ) ;
wandList . AddImage ( mwr ) ;
int ex = ( int ) ( wand . CurrentImage . Width - mwg . CurrentImage . Width ) / 2 ;
wand . CurrentImage . CompositeImage ( wandList . AppendImages ( true ) , CompositeOperator . AtopCompositeOp , ex , Convert . ToInt32 ( height * 0.26851851851851851851851851851852 ) ) ;
}
}
}
}
return wand ;
}
}
private string MontserratLightFont
{
get { return PlayedIndicatorDrawer . ExtractFont ( "MontserratLight.otf" , _appPaths ) ; }