-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
initial commits migrating samples from ImageSharp repo
- Loading branch information
0 parents
commit 6a274c4
Showing
11 changed files
with
664 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
*.doc diff=astextplain | ||
*.DOC diff=astextplain | ||
*.docx diff=astextplain | ||
*.DOCX diff=astextplain | ||
*.dot diff=astextplain | ||
*.DOT diff=astextplain | ||
*.pdf diff=astextplain | ||
*.PDF diff=astextplain | ||
*.rtf diff=astextplain | ||
*.RTF diff=astextplain | ||
|
||
*.jpg binary | ||
*.png binary | ||
*.gif binary | ||
|
||
*.cs text=auto diff=csharp | ||
*.vb text=auto | ||
*.c text=auto | ||
*.cpp text=auto | ||
*.cxx text=auto | ||
*.h text=auto | ||
*.hxx text=auto | ||
*.py text=auto | ||
*.rb text=auto | ||
*.java text=auto | ||
*.html text=auto | ||
*.htm text=auto | ||
*.css text=auto | ||
*.scss text=auto | ||
*.sass text=auto | ||
*.less text=auto | ||
*.js text=auto | ||
*.lisp text=auto | ||
*.clj text=auto | ||
*.sql text=auto | ||
*.php text=auto | ||
*.lua text=auto | ||
*.m text=auto | ||
*.asm text=auto | ||
*.erl text=auto | ||
*.fs text=auto | ||
*.fsx text=auto | ||
*.hs text=auto | ||
|
||
*.csproj text=auto merge=union | ||
*.vbproj text=auto merge=union | ||
*.fsproj text=auto merge=union | ||
*.dbproj text=auto merge=union | ||
*.sln text=auto eol=crlf merge=union |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,219 @@ | ||
## Ignore Visual Studio temporary files, build results, and | ||
## files generated by popular Visual Studio add-ons. | ||
|
||
# User-specific files | ||
*.suo | ||
*.user | ||
*.userosscache | ||
*.sln.docstates | ||
|
||
# User-specific files (MonoDevelop/Xamarin Studio) | ||
*.userprefs | ||
|
||
# Build results | ||
[Dd]ebug/ | ||
[Dd]ebugPublic/ | ||
[Rr]elease/ | ||
[Rr]eleases/ | ||
x64/ | ||
x86/ | ||
src/**/build/ | ||
tests/**/build/ | ||
bld/ | ||
[Bb]in/ | ||
[Oo]bj/ | ||
|
||
# Visual Studo 2015 cache/options directory | ||
.vs/ | ||
|
||
# MSTest test Results | ||
[Tt]est[Rr]esult*/ | ||
[Bb]uild[Ll]og.* | ||
|
||
# NUNIT | ||
*.VisualState.xml | ||
TestResult.xml | ||
|
||
# Build Results of an ATL Project | ||
[Dd]ebugPS/ | ||
[Rr]eleasePS/ | ||
dlldata.c | ||
|
||
# ASP.NET 5 | ||
project.lock.json | ||
artifacts/ | ||
|
||
*_i.c | ||
*_p.c | ||
*_i.h | ||
*.ilk | ||
*.meta | ||
*.obj | ||
*.pch | ||
*.pdb | ||
*.pgc | ||
*.pgd | ||
*.rsp | ||
*.sbr | ||
*.tlb | ||
*.tli | ||
*.tlh | ||
*.tmp | ||
*.tmp_proj | ||
*.log | ||
*.vspscc | ||
*.vssscc | ||
.builds | ||
*.pidb | ||
*.svclog | ||
*.scc | ||
|
||
# Chutzpah Test files | ||
_Chutzpah* | ||
|
||
# Visual C++ cache files | ||
ipch/ | ||
*.aps | ||
*.ncb | ||
*.opensdf | ||
*.sdf | ||
*.cachefile | ||
|
||
# Visual Studio profiler | ||
*.psess | ||
*.vsp | ||
*.vspx | ||
|
||
# TFS 2012 Local Workspace | ||
$tf/ | ||
|
||
# Guidance Automation Toolkit | ||
*.gpState | ||
|
||
# ReSharper is a .NET coding add-in | ||
_ReSharper*/ | ||
*.[Rr]e[Ss]harper | ||
*.DotSettings.user | ||
|
||
# JustCode is a .NET coding addin-in | ||
.JustCode | ||
|
||
# TeamCity is a build add-in | ||
_TeamCity* | ||
|
||
# DotCover is a Code Coverage Tool | ||
*.dotCover | ||
|
||
# NCrunch | ||
_NCrunch_* | ||
.*crunch*.local.xml | ||
|
||
# MightyMoose | ||
*.mm.* | ||
AutoTest.Net/ | ||
|
||
# Web workbench (sass) | ||
.sass-cache/ | ||
|
||
# Installshield output folder | ||
[Ee]xpress/ | ||
|
||
# DocProject is a documentation generator add-in | ||
DocProject/buildhelp/ | ||
DocProject/Help/*.HxT | ||
DocProject/Help/*.HxC | ||
DocProject/Help/*.hhc | ||
DocProject/Help/*.hhk | ||
DocProject/Help/*.hhp | ||
DocProject/Help/Html2 | ||
DocProject/Help/html | ||
|
||
# Click-Once directory | ||
publish/ | ||
|
||
# Publish Web Output | ||
*.[Pp]ublish.xml | ||
*.azurePubxml | ||
# TODO: Comment the next line if you want to checkin your web deploy settings | ||
# but database connection strings (with potential passwords) will be unencrypted | ||
*.pubxml | ||
*.publishproj | ||
|
||
# NuGet Packages | ||
*.nupkg | ||
# The packages folder can be ignored because of Package Restore | ||
**/packages/* | ||
# except build/, which is used as an MSBuild target. | ||
!**/packages/build/ | ||
# Uncomment if necessary however generally it will be regenerated when needed | ||
#!**/packages/repositories.config | ||
|
||
# Windows Azure Build Output | ||
csx/ | ||
*.build.csdef | ||
|
||
# Windows Store app package directory | ||
AppPackages/ | ||
|
||
# Others | ||
*.[Cc]ache | ||
ClientBin/ | ||
~$* | ||
*~ | ||
*.dbmdl | ||
*.dbproj.schemaview | ||
*.pfx | ||
*.publishsettings | ||
node_modules/ | ||
bower_components/ | ||
|
||
# RIA/Silverlight projects | ||
Generated_Code/ | ||
|
||
# Backup & report files from converting an old project file | ||
# to a newer Visual Studio version. Backup files are not needed, | ||
# because we have git ;-) | ||
_UpgradeReport_Files/ | ||
Backup*/ | ||
UpgradeLog*.XML | ||
UpgradeLog*.htm | ||
|
||
# SQL Server files | ||
*.mdf | ||
*.ldf | ||
|
||
# Business Intelligence projects | ||
*.rdl.data | ||
*.bim.layout | ||
*.bim_*.settings | ||
|
||
# Microsoft Fakes | ||
FakesAssemblies/ | ||
|
||
# Node.js Tools for Visual Studio | ||
.ntvs_analysis.dat | ||
|
||
# Visual Studio 6 build log | ||
*.plg | ||
|
||
# Visual Studio 6 workspace options file | ||
*.opt | ||
|
||
**/node_modules | ||
**/node_modules/* | ||
|
||
# ASP.NET 5 | ||
project.lock.json | ||
artifacts/ | ||
|
||
#BenchmarkDotNet | ||
**/BenchmarkDotNet.Artifacts/ | ||
|
||
# Build process | ||
*.csproj.bak | ||
|
||
**/output/*.png | ||
**/output/*.jpg | ||
**/output/*.jpeg | ||
**/output/*.bmp | ||
**/output/*.gif |
13 changes: 13 additions & 0 deletions
13
ImageSharp/AvatarWithRoundedCorner/AvatarWithRoundedCorner.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<OutputType>Exe</OutputType> | ||
<TargetFramework>netcoreapp1.1</TargetFramework> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta0001" /> | ||
</ItemGroup> | ||
|
||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
// Copyright (c) Six Labors and contributors. | ||
// Licensed under the Apache License, Version 2.0. | ||
|
||
using System; | ||
using System.Numerics; | ||
using SixLabors.ImageSharp; | ||
using SixLabors.ImageSharp.PixelFormats; | ||
using SixLabors.ImageSharp.Processing; | ||
using SixLabors.Primitives; | ||
using SixLabors.Shapes; | ||
|
||
namespace AvatarWithRoundedCorner | ||
{ | ||
static class Program | ||
{ | ||
static void Main(string[] args) | ||
{ | ||
System.IO.Directory.CreateDirectory("output"); | ||
using (var img = Image.Load("fb.jpg")) | ||
{ | ||
// as generate returns a new IImage make sure we dispose of it | ||
using (Image<Rgba32> destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 20))) | ||
{ | ||
destRound.Save("output/fb.png"); | ||
} | ||
|
||
using (Image<Rgba32> destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 100))) | ||
{ | ||
destRound.Save("output/fb-round.png"); | ||
} | ||
|
||
using (Image<Rgba32> destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 150))) | ||
{ | ||
destRound.Save("output/fb-rounder.png"); | ||
} | ||
|
||
using (Image<Rgba32> destRound = img.CloneAndConvertToAvatarWithoutApply(new Size(200, 200), 150)) | ||
{ | ||
destRound.Save("output/fb-rounder-without-apply.png"); | ||
} | ||
|
||
// the original `img` object has not been altered at all. | ||
} | ||
} | ||
|
||
// 1. The short way: | ||
// Implements a full image mutating pipeline operating on IImageProcessingContext<Rgba32> | ||
// We need the dimensions of the resized image to deduce 'IPathCollection' needed to build the corners, | ||
// so we implement an "inline" image processor by utilizing 'ImageExtensions.Apply()' | ||
private static IImageProcessingContext<Rgba32> ConvertToAvatar(this IImageProcessingContext<Rgba32> processingContext, Size size, float cornerRadius) | ||
{ | ||
return processingContext.Resize(new ResizeOptions | ||
{ | ||
Size = size, | ||
Mode = ResizeMode.Crop | ||
}).Apply(i => ApplyRoundedCorners(i, cornerRadius)); | ||
} | ||
|
||
// 2. A more verbose way, avoiding 'Apply()': | ||
// First we create a resized clone of the image, then we draw the corners on that instance with Mutate(). | ||
private static Image<Rgba32> CloneAndConvertToAvatarWithoutApply(this Image<Rgba32> image, Size size, float cornerRadius) | ||
{ | ||
Image<Rgba32> result = image.Clone( | ||
ctx => ctx.Resize( | ||
new ResizeOptions | ||
{ | ||
Size = size, | ||
Mode = ResizeMode.Crop | ||
})); | ||
|
||
ApplyRoundedCorners(result, cornerRadius); | ||
return result; | ||
} | ||
|
||
// This method can be seen as an inline implementation of an `IImageProcessor`: | ||
// (The combination of `IImageOperations.Apply()` + this could be replaced with an `IImageProcessor`) | ||
public static void ApplyRoundedCorners(Image<Rgba32> img, float cornerRadius) | ||
{ | ||
IPathCollection corners = BuildCorners(img.Width, img.Height, cornerRadius); | ||
|
||
// mutating in here as we already have a cloned original | ||
img.Mutate(x => x.Fill(Rgba32.Transparent, corners, new GraphicsOptions(true) | ||
{ | ||
BlenderMode = PixelBlenderMode.Src // enforces that any part of this shape that has color is punched out of the background | ||
})); | ||
} | ||
|
||
public static IPathCollection BuildCorners(int imageWidth, int imageHeight, float cornerRadius) | ||
{ | ||
// first create a square | ||
var rect = new RectangularePolygon(-0.5f, -0.5f, cornerRadius, cornerRadius); | ||
|
||
// then cut out of the square a circle so we are left with a corner | ||
IPath cornerToptLeft = rect.Clip(new EllipsePolygon(cornerRadius - 0.5f, cornerRadius - 0.5f, cornerRadius)); | ||
|
||
// corner is now a corner shape positions top left | ||
//lets make 3 more positioned correctly, we can do that by translating the orgional artound the center of the image | ||
var center = new Vector2(imageWidth / 2F, imageHeight / 2F); | ||
|
||
float rightPos = imageWidth - cornerToptLeft.Bounds.Width + 1; | ||
float bottomPos = imageHeight - cornerToptLeft.Bounds.Height + 1; | ||
|
||
// move it across the widthof the image - the width of the shape | ||
IPath cornerTopRight = cornerToptLeft.RotateDegree(90).Translate(rightPos, 0); | ||
IPath cornerBottomLeft = cornerToptLeft.RotateDegree(-90).Translate(0, bottomPos); | ||
IPath cornerBottomRight = cornerToptLeft.RotateDegree(180).Translate(rightPos, bottomPos); | ||
|
||
return new PathCollection(cornerToptLeft, cornerBottomLeft, cornerTopRight, cornerBottomRight); | ||
} | ||
} | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.