diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-08 23:56:42 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-08 23:56:42 -0400 |
| commit | 2caf01f43b7153127f8d26b26da3f762cbf321d4 (patch) | |
| tree | 32c5bfe1628652f7cff718c956e32fcfb1a7bfa4 | |
| parent | e70e06f0ac57efc66db5701f4f2a01d157eb8c8a (diff) | |
embed fonts
4 files changed, 61 insertions, 7 deletions
diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs index 80cfd7f3e..cb6058f3f 100644 --- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs @@ -282,13 +282,13 @@ namespace MediaBrowser.Server.Implementations.Drawing { var currentImageSize = new ImageSize(imageWidth, imageHeight); - new PlayedIndicatorDrawer().DrawPlayedIndicator(wand, currentImageSize); + new PlayedIndicatorDrawer(_appPaths).DrawPlayedIndicator(wand, currentImageSize); } else if (options.UnplayedCount.HasValue) { var currentImageSize = new ImageSize(imageWidth, imageHeight); - new UnplayedCountIndicator().DrawUnplayedCountIndicator(wand, currentImageSize, options.UnplayedCount.Value); + new UnplayedCountIndicator(_appPaths).DrawUnplayedCountIndicator(wand, currentImageSize, options.UnplayedCount.Value); } if (options.PercentPlayed > 0) diff --git a/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs b/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs index 6dd0b0fe7..359065cc2 100644 --- a/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs +++ b/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs @@ -1,5 +1,8 @@ using ImageMagickSharp; +using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Drawing; +using System; +using System.IO; namespace MediaBrowser.Server.Implementations.Drawing { @@ -8,6 +11,13 @@ namespace MediaBrowser.Server.Implementations.Drawing private const int FontSize = 52; private const int OffsetFromTopRightCorner = 38; + private readonly IApplicationPaths _appPaths; + + public PlayedIndicatorDrawer(IApplicationPaths appPaths) + { + _appPaths = appPaths; + } + public void DrawPlayedIndicator(MagickWand wand, ImageSize imageSize) { var x = imageSize.Width - OffsetFromTopRightCorner; @@ -24,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.Drawing pixel.Opacity = 0; pixel.Color = "white"; draw.FillColor = pixel; - draw.Font = "Webdings"; + draw.Font = ExtractFont("webdings.ttf", _appPaths); draw.FontSize = FontSize; draw.FontStyle = FontStyleType.NormalStyle; draw.TextAlignment = TextAlignType.CenterAlign; @@ -35,8 +45,42 @@ namespace MediaBrowser.Server.Implementations.Drawing draw.FillColor = pixel; wand.CurrentImage.DrawImage(draw); } + } + } + + internal static string ExtractFont(string name, IApplicationPaths paths) + { + var filePath = Path.Combine(paths.ProgramDataPath, "fonts", name); + + if (File.Exists(filePath)) + { + return filePath; + } + + var namespacePath = typeof(PlayedIndicatorDrawer).Namespace + ".fonts." + name; + var tempPath = Path.Combine(paths.TempDirectory, Guid.NewGuid().ToString("N") + ".ttf"); + Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); + + using (var stream = typeof(PlayedIndicatorDrawer).Assembly.GetManifestResourceStream(namespacePath)) + { + using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.Read)) + { + stream.CopyTo(fileStream); + } + } + Directory.CreateDirectory(Path.GetDirectoryName(filePath)); + + try + { + File.Copy(tempPath, filePath, false); } + catch (IOException) + { + + } + + return tempPath; } } } diff --git a/MediaBrowser.Server.Implementations/Drawing/UnplayedCountIndicator.cs b/MediaBrowser.Server.Implementations/Drawing/UnplayedCountIndicator.cs index c10084c9b..65212a315 100644 --- a/MediaBrowser.Server.Implementations/Drawing/UnplayedCountIndicator.cs +++ b/MediaBrowser.Server.Implementations/Drawing/UnplayedCountIndicator.cs @@ -1,6 +1,7 @@ -using System.Globalization; -using ImageMagickSharp; +using ImageMagickSharp; +using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Drawing; +using System.Globalization; namespace MediaBrowser.Server.Implementations.Drawing { @@ -8,6 +9,13 @@ namespace MediaBrowser.Server.Implementations.Drawing { private const int OffsetFromTopRightCorner = 38; + private readonly IApplicationPaths _appPaths; + + public UnplayedCountIndicator(IApplicationPaths appPaths) + { + _appPaths = appPaths; + } + public void DrawUnplayedCountIndicator(MagickWand wand, ImageSize imageSize, int count) { var x = imageSize.Width - OffsetFromTopRightCorner; @@ -25,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.Drawing pixel.Opacity = 0; pixel.Color = "white"; draw.FillColor = pixel; - draw.Font = "Sans-Serif"; + draw.Font = PlayedIndicatorDrawer.ExtractFont("robotoregular.ttf", _appPaths); draw.FontStyle = FontStyleType.NormalStyle; draw.TextAlignment = TextAlignType.CenterAlign; draw.FontWeight = FontWeightType.RegularStyle; @@ -36,7 +44,7 @@ namespace MediaBrowser.Server.Implementations.Drawing if (text.Length == 1) { - x += 2; + x += 1; } else if (text.Length == 2) { diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 923e57b9b..f645951a7 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -426,6 +426,8 @@ <EmbeddedResource Include="Localization\JavaScript\uk.json" /> <EmbeddedResource Include="Localization\Server\bg_BG.json" /> <EmbeddedResource Include="Localization\Server\uk.json" /> + <EmbeddedResource Include="Drawing\fonts\webdings.ttf" /> + <EmbeddedResource Include="Drawing\fonts\robotoregular.ttf" /> <None Include="Localization\JavaScript\sl_SI.json" /> <EmbeddedResource Include="Localization\Server\sl_SI.json" /> <None Include="packages.config" /> |
