Browse Source

WebP is now a separate plugin

Former-commit-id: 072872be821a4ac73038dec5a99de6ae2552a713
af/merge-core
James South 12 years ago
parent
commit
b6cf1e07e8
  1. 41
      src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs
  2. 17
      src/ImageProcessor.sln
  3. 85
      src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs
  4. 6
      src/ImageProcessor/ImageProcessor.csproj
  5. 4
      src/ImageProcessorConsole/ImageProcessorConsole.csproj
  6. 3
      src/ImageProcessorConsole/images/output/4.sm.webp
  7. 3
      src/ImageProcessorConsole/images/output/test.webp
  8. 67
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj
  9. 6
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs
  10. 3
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs
  11. 36
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs
  12. 0
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll.REMOVED.git-id
  13. 0
      src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll.REMOVED.git-id
  14. 5
      src/TestWebsites/NET45/Test_Website_NET45/Controllers/HomeController.cs
  15. 7
      src/TestWebsites/NET45/Test_Website_NET45/Test_Website_MVC_NET45.csproj
  16. 100
      src/TestWebsites/NET45/Test_Website_NET45/Views/Home/WebP.cshtml
  17. 1
      src/TestWebsites/NET45/Test_Website_NET45/Views/Shared/_Layout.cshtml

41
src/ImageProcessor.Web/NET45/HttpModules/ImageProcessingModule.cs

@ -43,6 +43,11 @@ namespace ImageProcessor.Web.HttpModules
/// </summary>
private const string CachedResponseTypeKey = "CACHED_IMAGE_RESPONSE_TYPE_054F217C-11CF-49FF-8D2F-698E8E6EB58F";
/// <summary>
/// The key for storing the file dependency of the current image.
/// </summary>
private const string CachedResponseFileDependency = "CACHED_IMAGE_DEPENDENCY_054F217C-11CF-49FF-8D2F-698E8E6EB58F";
/// <summary>
/// The regular expression to search strings for.
/// </summary>
@ -215,15 +220,18 @@ namespace ImageProcessor.Web.HttpModules
HttpContext context = ((HttpApplication)sender).Context;
object responseTypeObject = context.Items[CachedResponseTypeKey];
object dependencyFileObject = context.Items[CachedResponseFileDependency];
if (responseTypeObject != null)
if (responseTypeObject != null && dependencyFileObject != null)
{
string responseType = (string)responseTypeObject;
string dependencyFile = (string)dependencyFileObject;
// Set the headers
this.SetHeaders(context, responseType);
this.SetHeaders(context, responseType, dependencyFile);
context.Items[CachedResponseTypeKey] = null;
context.Items[CachedResponseFileDependency] = null;
}
}
@ -440,7 +448,15 @@ namespace ImageProcessor.Web.HttpModules
}
}
string incomingEtag = context.Request.Headers["If-None-Match"];
// Image is from the cache so the mime-type will need to be set.
if (context.Items[CachedResponseTypeKey] == null)
{
context.Items[CachedResponseTypeKey] = ImageHelpers.GetExtension(cachedPath).Replace(".", "image/");
}
context.Items[CachedResponseFileDependency] = cachedPath;
string incomingEtag = context.Request.Headers["If" + "-None-Match"];
if (incomingEtag != null && !isNewOrUpdated)
{
@ -449,8 +465,7 @@ namespace ImageProcessor.Web.HttpModules
context.Response.AddHeader("Content-Length", "0");
context.Response.StatusCode = (int)HttpStatusCode.NotModified;
context.Response.SuppressContent = true;
context.Response.AddFileDependency(context.Server.MapPath(virtualCachedPath));
this.SetHeaders(context, (string)context.Items[CachedResponseTypeKey]);
this.SetHeaders(context, (string)context.Items[CachedResponseTypeKey], cachedPath);
if (!isRemote)
{
@ -482,18 +497,28 @@ namespace ImageProcessor.Web.HttpModules
/// the <see cref="T:System.Web.HttpContext">HttpContext</see> object that provides
/// references to the intrinsic server objects
/// </param>
/// <param name="responseType">The HTTP MIME type to to send.</param>
private void SetHeaders(HttpContext context, string responseType)
/// <param name="responseType">
/// The HTTP MIME type to to send.
/// </param>
/// <param name="dependencyPath">
/// The dependency path for the cache dependency.
/// </param>
private void SetHeaders(HttpContext context, string responseType, string dependencyPath)
{
HttpResponse response = context.Response;
response.ContentType = responseType;
response.AddHeader("Image-Served-By", "ImageProcessor.Web/" + AssemblyVersion);
if (response.Headers["Image-Served-By"] == null)
{
response.AddHeader("Image-Served-By", "ImageProcessor.Web/" + AssemblyVersion);
}
HttpCachePolicy cache = response.Cache;
cache.SetCacheability(HttpCacheability.Public);
cache.VaryByHeaders["Accept-Encoding"] = true;
context.Response.AddFileDependency(dependencyPath);
cache.SetLastModifiedFromFileDependencies();
int maxDays = DiskCache.MaxFileCachedDuration;

17
src/ImageProcessor.sln

@ -36,6 +36,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageProcessor.Web.UnitTest
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageProcessor.UnitTests", "ImageProcessor.UnitTests\ImageProcessor.UnitTests.csproj", "{633B1C4C-4823-47BE-9A01-A665F3118C8C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageProcessor.Plugins.WebP", "Plugins\ImageProcessor\ImageProcessor.Plugins.WebP\ImageProcessor.Plugins.WebP.csproj", "{2CF69699-959A-44DC-A281-4E2596C25043}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Any CPU = All|Any CPU
@ -201,6 +203,21 @@ Global
{633B1C4C-4823-47BE-9A01-A665F3118C8C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{633B1C4C-4823-47BE-9A01-A665F3118C8C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{633B1C4C-4823-47BE-9A01-A665F3118C8C}.Release|x86.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.All|Any CPU.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.All|Any CPU.Build.0 = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.All|Mixed Platforms.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.All|Mixed Platforms.Build.0 = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.All|x86.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Debug|x86.ActiveCfg = Debug|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Release|Any CPU.Build.0 = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2CF69699-959A-44DC-A281-4E2596C25043}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

85
src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs

@ -4,22 +4,25 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
// <summary>
// The image processor bootstrapper.
// The ImageProcessor bootstrapper.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Configuration
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using ImageProcessor.Common.Exceptions;
using ImageProcessor.Common.Extensions;
using ImageProcessor.Imaging.Formats;
/// <summary>
/// The image processor bootstrapper.
/// The ImageProcessor bootstrapper.
/// </summary>
public class ImageProcessorBootstrapper
{
@ -35,8 +38,8 @@ namespace ImageProcessor.Configuration
/// </summary>
private ImageProcessorBootstrapper()
{
this.LoadSupportedImageFormats();
this.NativeBinaryFactory = new NativeBinaryFactory();
this.LoadSupportedImageFormats();
}
/// <summary>
@ -70,14 +73,42 @@ namespace ImageProcessor.Configuration
try
{
Type type = typeof(ISupportedImageFormat);
HashSet<string> found = new HashSet<string>();
// Get any references and used assemblies.
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
this.LoadReferencedAssemblies(found, assembly);
}
// Get any referenced but not used assemblies.
Assembly executingAssembly = Assembly.GetExecutingAssembly();
string targetBasePath = Path.GetDirectoryName(new Uri(executingAssembly.Location).LocalPath);
// ReSharper disable once AssignNullToNotNullAttribute
FileInfo[] files = new DirectoryInfo(targetBasePath).GetFiles("*.dll", SearchOption.AllDirectories);
foreach (FileInfo fileInfo in files)
{
AssemblyName assemblyName = AssemblyName.GetAssemblyName(fileInfo.FullName);
if (!AppDomain.CurrentDomain.GetAssemblies()
.Any(a => AssemblyName.ReferenceMatchesDefinition(assemblyName, a.GetName())))
{
// In a web app, this assembly will automatically be bound from the
// Asp.Net Temporary folder from where the site actually runs.
this.LoadReferencedAssemblies(found, Assembly.Load(assemblyName));
}
}
List<Type> availableTypes = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(s => s.GetLoadableTypes())
.SelectMany(a => a.GetLoadableTypes())
.Where(t => type.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract)
.ToList();
this.SupportedImageFormats = availableTypes
.Select(x => (Activator.CreateInstance(x) as ISupportedImageFormat)).ToList();
.Select(f => (Activator.CreateInstance(f) as ISupportedImageFormat)).ToList();
}
catch (Exception ex)
{
@ -85,5 +116,49 @@ namespace ImageProcessor.Configuration
}
}
}
/// <summary>
/// Loads any referenced assemblies into the current application domain.
/// </summary>
/// <param name="found">
/// The collection containing the name of already found assemblies.
/// </param>
/// <param name="assembly">
/// The assembly to load from.
/// </param>
private void LoadReferencedAssemblies(HashSet<string> found, Assembly assembly)
{
// Used to avoid duplicates
ArrayList results = new ArrayList();
// Resulting info
Stack stack = new Stack();
// Stack of names
// Store root assembly (level 0) directly into results list
stack.Push(assembly.ToString());
// Do a preorder, non-recursive traversal
while (stack.Count > 0)
{
string info = (string)stack.Pop();
// Get next assembly
if (!found.Contains(info))
{
found.Add(info);
results.Add(info);
// Store it to results ArrayList
Assembly child = Assembly.Load(info);
AssemblyName[] subchild = child.GetReferencedAssemblies();
for (int i = subchild.Length - 1; i >= 0; --i)
{
stack.Push(subchild[i].ToString());
}
}
}
}
}
}

6
src/ImageProcessor/ImageProcessor.csproj

@ -79,7 +79,6 @@
<Compile Include="Imaging\Filters\MatrixFilterBase.cs" />
<Compile Include="Imaging\Filters\MatrixFilters.cs" />
<Compile Include="Imaging\Formats\BitmapFormat.cs" />
<Compile Include="Imaging\Formats\NativeMethods.cs" />
<Compile Include="Imaging\Formats\TiffFormat.cs" />
<Compile Include="Imaging\Formats\PngFormat.cs" />
<Compile Include="Imaging\Formats\GifFormat.cs" />
@ -87,7 +86,6 @@
<Compile Include="Imaging\Formats\FormatUtilities.cs" />
<Compile Include="Imaging\Formats\FormatBase.cs" />
<Compile Include="Imaging\Formats\ISupportedImageFormat.cs" />
<Compile Include="Imaging\Formats\WebPFormat.cs" />
<Compile Include="Imaging\GaussianLayer.cs" />
<Compile Include="Imaging\Formats\GifEncoder.cs" />
<Compile Include="Imaging\Formats\GifFrame.cs" />
@ -131,10 +129,6 @@
<Compile Include="Processors\Watermark.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\Unmanaged\x64\libwebp.dll" />
<EmbeddedResource Include="Resources\Unmanaged\x86\libwebp.dll" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

4
src/ImageProcessorConsole/ImageProcessorConsole.csproj

@ -56,6 +56,10 @@
<Project>{3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}</Project>
<Name>ImageProcessor</Name>
</ProjectReference>
<ProjectReference Include="..\Plugins\ImageProcessor\ImageProcessor.Plugins.WebP\ImageProcessor.Plugins.WebP.csproj">
<Project>{2cf69699-959a-44dc-a281-4e2596c25043}</Project>
<Name>ImageProcessor.Plugins.WebP</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

3
src/ImageProcessorConsole/images/output/4.sm.webp

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc9ccd29734ed06d2916389cc363955924f4bbb200fea91c113ae2b9334eca1f
size 12162

3
src/ImageProcessorConsole/images/output/test.webp

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b41b4fe144f9d3eaee706b516021efc7abc598f17655d9592866963bfa62f3ad
size 5590

67
src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2CF69699-959A-44DC-A281-4E2596C25043}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ImageProcessor.Plugins.WebP</RootNamespace>
<AssemblyName>ImageProcessor.Plugins.WebP</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Imaging\Formats\WebPFormat.cs" />
<Compile Include="Imaging\Formats\NativeMethods.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<EmbeddedResource Include="Resources\Unmanaged\x64\libwebp.dll" />
<EmbeddedResource Include="Resources\Unmanaged\x86\libwebp.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\ImageProcessor\ImageProcessor.csproj">
<Project>{3b5dd734-fb7a-487d-8ce6-55e7af9aea7e}</Project>
<Name>ImageProcessor</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

6
src/ImageProcessor/Imaging/Formats/NativeMethods.cs → src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs

@ -8,7 +8,7 @@
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Imaging.Formats
namespace ImageProcessor.Plugins.WebP.Imaging.Formats
{
using System;
using System.IO;
@ -23,7 +23,7 @@ namespace ImageProcessor.Imaging.Formats
internal static class NativeMethods
{
/// <summary>
/// Whether the process is running in 64bit mode. Used for calling the correct dllimport method.
/// Whether the process is running in 64bit mode. Used for calling the correct method.
/// Clunky I know but I couldn't get dynamic methods to work.
/// </summary>
private static readonly bool Is64Bit = Environment.Is64BitProcess;
@ -34,7 +34,7 @@ namespace ImageProcessor.Imaging.Formats
static NativeMethods()
{
string folder = Is64Bit ? "x64" : "x86";
string name = string.Format("ImageProcessor.Resources.Unmanaged.{0}.libwebp.dll", folder);
string name = string.Format("ImageProcessor.Plugins.WebP.Resources.Unmanaged.{0}.libwebp.dll", folder);
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name);
using (MemoryStream memoryStream = new MemoryStream())

3
src/ImageProcessor/Imaging/Formats/WebPFormat.cs → src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs

@ -10,7 +10,7 @@
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace ImageProcessor.Imaging.Formats
namespace ImageProcessor.Plugins.WebP.Imaging.Formats
{
using System;
using System.Collections.Generic;
@ -22,6 +22,7 @@ namespace ImageProcessor.Imaging.Formats
using System.Text;
using ImageProcessor.Common.Exceptions;
using ImageProcessor.Imaging.Formats;
/// <summary>
/// Provides the necessary information to support webp images.

36
src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ImageProcessor.Plugins.WebP")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("James South")]
[assembly: AssemblyProduct("ImageProcessor.Plugins.WebP")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("bf160db5-2ea7-4c85-9b0e-f1ddf2595e37")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

0
src/ImageProcessor/Resources/Unmanaged/x64/libwebp.dll.REMOVED.git-id → src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll.REMOVED.git-id

0
src/ImageProcessor/Resources/Unmanaged/x86/libwebp.dll.REMOVED.git-id → src/Plugins/ImageProcessor/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll.REMOVED.git-id

5
src/TestWebsites/NET45/Test_Website_NET45/Controllers/HomeController.cs

@ -41,6 +41,11 @@ namespace Test_Website_NET45.Controllers
return View();
}
public ActionResult WebP()
{
return View();
}
public ActionResult External()
{
return this.View();

7
src/TestWebsites/NET45/Test_Website_NET45/Test_Website_MVC_NET45.csproj

@ -159,6 +159,10 @@
<Project>{3b5dd734-fb7a-487d-8ce6-55e7af9aea7e}</Project>
<Name>ImageProcessor</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Plugins\ImageProcessor\ImageProcessor.Plugins.WebP\ImageProcessor.Plugins.WebP.csproj">
<Project>{2cf69699-959a-44dc-a281-4e2596c25043}</Project>
<Name>ImageProcessor.Plugins.WebP</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="config\imageprocessor\cache.config">
@ -191,6 +195,9 @@
<ItemGroup>
<Content Include="Views\Home\External.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Home\WebP.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

100
src/TestWebsites/NET45/Test_Website_NET45/Views/Home/WebP.cshtml

@ -0,0 +1,100 @@
@{
ViewBag.Title = "WebP";
}
<article>
<h1>WebP</h1>
<section>
<div class="row">
<div class="col-s-6">
<h2>Resized</h2>
<img src="/images/Penguins.bmp?format=webp&width=300" />
</div>
<div class="col-s-6">
<h2>Cropped </h2>
<img src="/images/Penguins.bmp?format=webp&crop=0-0-300-225" />
</div>
</div>
</section>
<section>
<h2>Filter</h2>
<div class="row">
<div class="col-s-6">
<h3>blackwhite</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=blackwhite" />
</div>
<div class="col-s-6">
<h3>comic</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=comic" />
</div>
</div>
<div class="row">
<div class="col-s-6">
<h3>lomograph</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=lomograph" />
</div>
<div class="col-s-6">
<h3>greyscale</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=greyscale" />
</div>
</div>
<div class="row">
<div class="col-s-6">
<h3>polaroid</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=polaroid" />
</div>
<div class="col-s-6">
<h3>sepia</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=sepia" />
</div>
</div>
<div class="row">
<div class="col-s-6">
<h3>gotham</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=gotham" />
</div>
<div class="col-s-6">
<h3>hisatch</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=hisatch" />
</div>
</div>
<div class="row">
<div class="col-s-6">
<h3>losatch</h3>
<img src="/images/Penguins.bmp?format=webp&width=300&filter=losatch" />
</div>
</div>
</section>
<section>
<div class="row">
<div class="col-s-6">
<h2>Watermark</h2>
<img src="/images/Penguins.bmp?format=webp&width=300&watermark=text-test|color-fff|size-48|style-italic|opacity-100|position-100-100|shadow-true|font-arial" />
</div>
<div class="col-s-6">
<h2>Format</h2>
<img src="/images/Penguins.bmp?format=webp&width=300" />
</div>
</div>
</section>
<section>
<div class="row">
<div class="col-s-6">
<h2>Rotate</h2>
<img src="/images/Penguins.bmp?format=webp&width=300&rotate=angle-54|bgcolor-fff" />
</div>
<div class="col-s-6">
<h2>Quality</h2>
<img src="/images/Penguins.bmp?format=webp&width=300&quality=5" />
</div>
</div>
</section>
<section>
<div class="row">
<div class="col-s-6">
<h2>Alpha</h2>
<img src="/images/Penguins.bmp?format=webp&width=300&alpha=50" />
</div>
</div>
</section>
</article>

1
src/TestWebsites/NET45/Test_Website_NET45/Views/Shared/_Layout.cshtml

@ -29,6 +29,7 @@
<li>@Html.ActionLink("Png8", "Png8")</li>
<li>@Html.ActionLink("Bmp", "Bmp")</li>
<li>@Html.ActionLink("Tiff", "Tiff")</li>
<li>@Html.ActionLink("WebP", "WebP")</li>
<li>@Html.ActionLink("External", "External")</li>
</ul>
</nav>

Loading…
Cancel
Save