<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
  <title type='text'>ASP.NET Image resizing for IIS</title>
  <generator uri='http://effectif.com/nesta'>Nesta</generator>
  <id>tag:imageresizing.net,2009:/</id>
  <link href='http://imageresizing.net/articles.xml' rel='self' />
  <link href='http://imageresizing.net' rel='alternate' />
  <subtitle type='text'>URL-based image resizing has arrived, and it works with every language imaginable</subtitle>
  <updated>2012-02-22T00:00:00+00:00</updated>
  <author>
    <name>Nathanael Jones</name>
    <uri>http://nathanaeljones.com</uri>
    <email>computer.linguist@gmail.com</email>
  </author>
  <entry>
    <title>Resizer 3.1.5 - Feb 22 2012</title>
    <link href='http://imageresizing.net/releases/3-1-5' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2012-02-22:/releases/3-1-5</id>
    <content type='html'>
      &lt;p&gt;&lt;a href=&quot;http://imageresizing.net/releases/3-1-alpha-2&quot;&gt;Read the release notes for v3.1&lt;/a&gt;, &lt;a href=&quot;http://imageresizing.net/releases/3-1-3&quot;&gt;V3.1.3&lt;/a&gt;, and &lt;a href=&quot;http://imageresizing.net/releases/3-1-4&quot;&gt;V3.1.4&lt;/a&gt; if you're upgrading from 3.0. V3.1 included major changes to all plugins and the core, and included a long list of bug fixes. It also introduced 11 new plugins and 5 rewritten ones. V3.1.3 introduced 2 new plugins and a new path syntax, while V3.1.4 fixed several bugs&lt;/p&gt;
      
      &lt;p&gt;This release fixes 19 bugs and adds 8 minor features. Experimental mono support is added, as is a new experimental &lt;a href=&quot;http://imageresizing.net/plugins/mongoreader&quot;&gt;MongoReader plugin for accessing GridFS files&lt;/a&gt;.&lt;/p&gt;
      
      &lt;h3&gt;Potentially breaking changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Plugins are now loaded at a different time.&lt;/li&gt;
      &lt;li&gt;All querystring and config values are now culture invariant, so if you've been using commas instead of periods for the decimal symbol, since your server was non-English, it's time to switch them back.&lt;/li&gt;
      &lt;li&gt;Watermark plugin now renders text better, using a better algorithm. Make sure your watermarks aren't somehow messed up by the clearer text.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Changes in ImageResizer.dll&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;p&gt;For ASP.NET, plugins are now loaded on first request instead of at application start. For non-ASP.NET apps, plugins are now loaded at application start instead of ... never. This bug was caused by a typo introduced in V3.0.7 during a simple refactoring.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;Experimental Mono support!&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&amp;amp;mode=crop now correctly respects &amp;amp;scale=upscaleonly, &amp;amp;scale=downscaleonly, and &amp;amp;scale=upscalecanvas restrictions. Previously, it would cause distortion on images by incorrectly cropping even when the image was being 'left alone' due to the &amp;amp;scale setting. This problem would only occur when specifying both width, height, and &amp;amp;mode=crop and when the original image size was smaller than width/height. Bug introduced in V3.1.1 while adding support for double cropping (combined manual and automatic cropping).&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;The ImageResizer now uses culture-invariant number and date handling for all configuration and querystring data. This means that the ImageResizer should now behave the same on an english-language server as a non-english language server. Although only detected as a problem with the PsdComposer plugin, it's possible that this has caused non-integer values for &amp;amp;rotate, &amp;amp;margin, &amp;amp;padding, &amp;amp;crop, &amp;amp;cropxunits, and &amp;amp;cropyunits to be interpreted incorrectly on severs whose culture settings have the inverse meanings for &quot;.&quot; and &quot;,&quot; than en-US. Other plugins this may have affected would be SimpleFilters, SeamCarving, and WhitespaceTrimmer. This behavior has existed since V1. Please e-mail support@imageresizing.net if this change would be unexpected to you.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;Fixed bug: &amp;amp;flip=y&amp;amp;rotate=180 and &amp;amp;flip=y&amp;amp;rotate=270 would produce the wrong result by 90 degrees. Only those two combinations of settings were affected.&lt;/p&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Bug fixes by plugin&lt;/h2&gt;
      
      &lt;h3&gt;PrettyGifs changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;PrettyGifs no longer throws an exception when &amp;amp;dither=4pass is used. This typo was introduced with V3.1.3.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;PsdComposer changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Psd Parser: Culture-invariant, and now BinaryReverseReader explicitly uses code page ISO-8859-1 instead of the system default.&lt;/li&gt;
      &lt;li&gt;PsdCommandBuilder: Added support for null and empty string values in string dictionaries. Made color parsing culture invariant. Made all layer name comparisons OrdinalIgnoreCase instead of CurrentCultureIgnoreCase&lt;/li&gt;
      &lt;li&gt;MemCachedFile now throws FileNotFoundException when the PSD files is missing, which turns into an HTTP 404 error and allows Image404 to work.&lt;/li&gt;
      &lt;li&gt;Now supports virtual source files, anything IVirtualFile (must be registered before those plugins, however).&lt;/li&gt;
      &lt;li&gt;No longer inherits from VirtualPathProvider - just implements IVirtualImageProvider. No longer supports IVirtualFileWithModifiedDate due to caching without dependencies.&lt;/li&gt;
      &lt;li&gt;When strict mode is disabled, ignores missing fonts and uses generic sans serif instead.&lt;/li&gt;
      &lt;li&gt;When PsdReader and PsdComposer are used together, only bundle 4 is reporting being used.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;CloudFront changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;New redirectThrough feature now works properly on querystrings with more than one command.&lt;/li&gt;
      &lt;li&gt;Now compatible with Amazon S3 buckets that contain periods.&lt;/li&gt;
      &lt;li&gt;Now compatible with extensionless urls.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;RemoteReader changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added support for redirects (default limited to 5, configurable with remotereader.allowRedirects), added 403 error pass through (404 already implemented).&lt;/li&gt;
      &lt;li&gt;Added support for extension-less remote URLs, even using the human-friendly syntax.&lt;/li&gt;
      &lt;li&gt;Added support for spaces and many url-encoded characters in the human-friendly syntax.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;PdfRenderer changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed version number by including shared version file&lt;/li&gt;
      &lt;li&gt;Added support for PDF files with rotated pages&lt;/li&gt;
      &lt;li&gt;Added pdfwidth and pdfheight querystring settings to allow overriding the ghostscript rendering size for higher quality thumbnails.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;Watermark plugin changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed: font style attribute was being ignored.&lt;/li&gt;
      &lt;li&gt;Changed the default text rendering algorithm to one better suited to image compositing.&lt;/li&gt;
      &lt;li&gt;Fixed bug in OtherImages configuration; was previously throwing an exception for querystring-specified filenames.&lt;/li&gt;
      &lt;li&gt;Added Rendering property/attribute for text layers to allow adjustment of rendering algorithm. Changed the default from ClearType to AntiAliasGridFit (better for images).&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;DiskCache changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now logs an issue if cleanup strategy values are modified.&lt;/li&gt;
      &lt;li&gt;Fixed flaw in file lookup algorithm which caused a subset of files to 'miss the cache', always regenerating instead of using the existing version. This flaw affected virtual files without modified dates; specifically RemoteReader provided files, Gradient plugin files, and S3Reader files when fastMode was enabled.&lt;/li&gt;
      &lt;li&gt;DiskCache: Fixed bug where a 0-byte file would get cached when an exception occurred during the e.ResizeImageToStream method. For optimistic IVirtualImageProviders (Like S3Reader in fastMode, RemoteReader, and MongoReader, but not VirtualFolder, SqlReader, Gradient, or S3Reader with fastMode=false), this would cause the second request for the missing file to return a 0-byte result instead of a 404. This behavior would be noticed most easily with the 404Plugin installed, as it would only redirect the first request, and not during subsequent ones.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;ImageHandlerSyntax changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Removed legacy w-&gt;width and h-&gt;height conversion, as 'w' and 'h' are now supported by the core, and it didn't support mixing the conventions properly.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;Image404 changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now normalizes both the original querystring and the 404 image's querystring before merging them to prevent duplicates like ?width=200&amp;amp;w=400.&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2012-02-22T00:00:00+00:00</published>
    <updated>2012-02-22T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.1.4 - Jan 22 2012</title>
    <link href='http://imageresizing.net/releases/3-1-4' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2012-01-22:/releases/3-1-4</id>
    <content type='html'>
      &lt;p&gt;&lt;a href=&quot;http://imageresizing.net/releases/3-1-alpha-2&quot;&gt;Read the release notes for v3.1&lt;/a&gt; and &lt;a href=&quot;http://imageresizing.net/releases/3-1-3&quot;&gt;V3.1.3&lt;/a&gt; if you're upgrading from 3.0.X. V3.1 included major changes to all plugins and the core, and included a long list of bug fixes. It also introduced 11 new plugins and 5 rewritten ones. V3.1.3 introduced 2 new plugins and a new path syntax.&lt;/p&gt;
      
      &lt;p&gt;This release adds minor new features and fixes some minor bugs.&lt;/p&gt;
      
      &lt;h2&gt;Major bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;The setter for the ResizeSettings.Height property works again (it was broken in 3.1.3 due to a typo made while adding the w/h syntax).&lt;/li&gt;
      &lt;li&gt;ImageBuilder now throws a FileNotFoundException instead of a NullReferenceException when a ASP.NET virtual path like  &quot;~/file.png&quot; doesn't exist.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Minor new features&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added ImageJob.CreateDir() alias - a chainable way to set CreateParentDirectory to true.&lt;/li&gt;
      &lt;li&gt;Added /resizer.debug warning when running under IIS7 classic mode instead of integrated mode.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Minor bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now compiles under Visual Studio 11 preview&lt;/li&gt;
      &lt;li&gt;Better error messages for empty or read-to-end streams from a (I)VirtualFile or HttpPostedFile source value.&lt;/li&gt;
      &lt;li&gt;ImageBuilder.Build, LoadImage, and GetStreamFromSource now throw an ArgumentNullException if parameter 'source' is null.&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2012-01-22T00:00:00+00:00</published>
    <updated>2012-01-22T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title></title>
    <link href='http://imageresizing.net/openletter' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2012-01-15:/openletter</id>
    <content type='html'>
      &lt;h2&gt;Open Letter to the .NET community, Jan 15, 2012&lt;/h2&gt;
      
      &lt;p&gt;Going open-source for a niche .NET product is a very risky move. I did it with the optimistic view that &lt;em&gt;at least 1 in 10 developers&lt;/em&gt; would be honest enough to buy licenses for the paid plugins they use. With 100% customer satisfaction rate across thousands of users, I expected more loyalty.&lt;/p&gt;
      
      &lt;p&gt;So far, only &lt;em&gt;1 in 25&lt;/em&gt; have paid for the paid plugins they are using. I'm not even counting the much larger percentage of users that don't need any of the plugins, who don't have the traffic to justify disk caching, and don't need HQ GIF or advanced file format support.&lt;/p&gt;
      
      &lt;p&gt;The .NET software community is notorious for its treatment of open-source projects, but I hoped (and still do) that they were slowly becoming more intelligent, and realizing how self-destructive that behavior was. Nearly very other community has realized how the open-source model produces better quality code, but extremist capitalism still seems to be the norm for .NET. No intelligent reasons for this behavior remain, but who will mend their habits and shed the FUD first?&lt;/p&gt;
      
      &lt;p&gt;Someone has to change things, but who will start? How do we make the community less selfish and more willing to collaborate? CodePlex proved that while many .NET developers will donate their existing work, few are humble enough to collaborate with existing projects instead of building their own. I count 18 image processing-related projects on CodePlex; all with just 1 developer each, and none are maintained. Yet together, they &lt;em&gt;could&lt;/em&gt; have created truly great software, instead of buggy, unmaintained, single-person's purpose libraries. Enough interested people in a project can keep it maintained and supported.&lt;/p&gt;
      
      &lt;p&gt;This project, although primarily supported, funded, and maintained by myself, seems to have received more community code contributions that any other similar .NET library. I &lt;a href=&quot;http://imageresizing.net/docs/contribute&quot;&gt;actively encourage people to share code&lt;/a&gt;, and provide very high priority support to anyone doing so.&lt;/p&gt;
      
      &lt;p&gt;But it's still a fraction of the amount of sharing I see in, for example, the Ruby community. With Ruby, there's enough eagerness to help that you really don't need to charge for anything to keep it maintained. People apply patches, and you accept or deny them with a few buttons.&lt;/p&gt;
      
      &lt;p&gt;With .NET, 85% of the support emails reporting a problem don't even include an error message. I'm happy with getting a stack trace from .NET devs. When people share patches or plugins, I'm astounded.&lt;/p&gt;
      
      &lt;p&gt;I've tried to make this project easy to use in all senses of the phrase. The core and half the plugins are free, the paid plugins only cost an average of $15 each, and I provide free e-mail support. I answer 70% of questions within 1 hour (that's 451 of the last 647). I always make sure every problem is resolved. I've made the licenses allow insane amounts of freedom, and they're as business-friendly as a license can be. Microsoft could buy a bundle for $250 and use it across the entire company, re-using it it both proprietary and open-source projects.&lt;/p&gt;
      
      &lt;p&gt;I know that roughly 40% of my users live in a developing country, and have a very justifiable reason for any piracy they may commit. That's fine by me. If you have a hard time feeding your family, I certainly don't want your money. I feel the pinch of the grocery bills myself. But if you live in the USA or the UK, it's unlikely that you're in that situation.&lt;/p&gt;
      
      &lt;p&gt;If you're a business employee and you don't bother buying a license because it's just too much paperwork or bureaucracy; well, I can't say I have much respect for you.&lt;/p&gt;
      
      &lt;p&gt;Businesses reap the largest gains from using open-source software, but because it's not a personal relationship, most employees feel like their hands are washed when the business doesn't bother sharing back with the project in either code, money, or credit.&lt;/p&gt;
      
      &lt;p&gt;That's self-destructive to the business. Business need software that sticks around and stays maintained. Open-source software is three times as likely to stay around and stay maintained as proprietary code libraries (based on my personal, painful experience), but yet some companies are still more willing to pay money to a proprietary library that figuratively locks them in a cell than to donate a quarter of the same amount to an open-source project they use to ensure it's continued existence and that their feature requests will be met.&lt;/p&gt;
      
      &lt;p&gt;Open-source libraries are so much more efficient with money than dev software companies that comparison is absurd. You can get a change made to an open-source project for $100. Proprietary? You'll need a 10K partnership deal. Enterprise license? 100k plus royalties. And usually, the open-source project could be sustained for 5k/year.&lt;/p&gt;
      
      &lt;p&gt;Open-source .NET is, admittedly, a challenge. You need very expensive dev tools, servers, and profiling tools; there are constant costs associated with developing in it. And developing re-usable code for ASP.NET is a nonstop job. There's a new bunch of bugs delivered with every OS update, a newly broken API every release, and performance challenges built into the framework that keep you running ILSpy non-stop. Supporting every combination of IIS and .NET is something few people even attempt. But it can be done.&lt;/p&gt;
      
      &lt;p&gt;I believe open-source can survive in the .NET community. It may be a decade before it thrives, but I think it can survive.&lt;/p&gt;
      
      &lt;p&gt;This project is a hybrid. It's half pure, MIT-style, open-source, and half 'licensed' MIT-wannabe open-source. Business aren't fond of spending money they aren't legally obligated to, so I've taken that into account while preserving as many of your freedoms and their freedoms as possible. I'm trying to show that open-source in .NET is possible for middle-size systems; those without big business sponsors, but yet too big to be a side job for a person.&lt;/p&gt;
      
      &lt;p&gt;Some day, I hope to make this entire project 100% pure open-source, without licensing fees for any of the plugins. I look forward to when the community has shed its selfishness enough that it can maintain what it uses; fix what it finds broken. But that day seems far off from where I stand, seeing less than 0.8% of users contribute anything back to this project.&lt;/p&gt;
      
      &lt;p&gt;By making only the more specialized plugins 'paid', I made the software free for 80% of users. I need you, the 20% that uses these plugins, to be honest, if you can.&lt;/p&gt;
      
      &lt;p&gt;If using these without paying, contributing, or publicizing in return makes you feel a little guilty, then please clear your conscience by giving back in some way. If you don't feel any guilt, well, this letter wasn't written to you.&lt;/p&gt;
      
      &lt;p&gt;I believe that more than 4% of you are honest. If the number had been 15%, I would never have written this letter. But 4%? Really?&lt;/p&gt;
      
      &lt;p&gt;I hate DRM - I see it as being both destructive and very ineffective. But I now understand its attraction; and how anger and sadness can make it seem justified.&lt;/p&gt;
      
      &lt;p&gt;Don't make me resort to license keys, protected downloads, or any other shallow methods to encourage honesty.&lt;/p&gt;
      
      &lt;p&gt;Please prove me right. Prove open-source can work, even in the .NET world. Share something. Give back something in kind. If you're time-poor and money rich, buy a license. If you're money poor and time rich, &lt;a href=&quot;http://resizer.uservoice.com/forums/108373-image-resizer-v3&quot;&gt;build one of the plugins on the ideas page&lt;/a&gt;. If you're poor of both, try to tell other people about the project, either in person or through your blog. Think about every open-source .NET library you use and love, and try to help each one in some way.&lt;/p&gt;
      
      &lt;p&gt;Make us glad we've gone open-source. Prove you're worth it.&lt;/p&gt;
    </content>
    <published>2012-01-15T00:00:00+00:00</published>
    <updated>2012-01-15T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.1.3 - Jan 14 2012</title>
    <link href='http://imageresizing.net/releases/3-1-3' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2012-01-14:/releases/3-1-3</id>
    <content type='html'>
      &lt;p&gt;&lt;a href=&quot;http://imageresizing.net/releases/3-1-alpha-2&quot;&gt;Read the release notes for v3.1&lt;/a&gt; if you're upgrading from 3.0.X. V3.1 included major changes to all plugins and the core, and included a long list of bug fixes. It also introduced 11 new plugins and 5 rewritten ones.&lt;/p&gt;
      
      &lt;p&gt;This release fixes some bugs in V3.1, adds some new features, and introduces 2 new plugins, &lt;a href=&quot;http://imageresizing.net/plugins/pdfrenderer&quot;&gt;PdfRenderer&lt;/a&gt; and &lt;a href=&quot;http://imageresizing.net/plugins/iepngfix&quot;&gt;IEPngFix&lt;/a&gt;.&lt;/p&gt;
      
      &lt;h2&gt;Bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed a theoretical memory leak in the PrettyGifs plugin (undisposed Bitmap instance), inside the quantization algorithm I ported many years ago. I believe it's gone undiscovered this long because most GIF images are small, and of insufficient volume to stay ahead of the garbage collector. This bug hasn't been seen in practice; I discovered it during a routine self-code-review of the PrettyGifs source code. You should immediately update to 3.1.3 if you use the PrettyGifs plugin and generate a high volume of GIF or 8-bit PNG images.&lt;/li&gt;
      &lt;li&gt;Fixed 'black background when rotated odd angles' bug, which was introduced in version 3.1.2.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/remotereader&quot;&gt;RemoteReader&lt;/a&gt; now works properly with the 404Plugin, instead of failing to redirect to the 404 image.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/s3reader&quot;&gt;S3Reader&lt;/a&gt; no longer silently fails when there is a problem with the S3 bucket; the error is thrown properly, and is displayed if error display is enabled. Also, bucket names are now case-insensitive and whitespace is ignored.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/s3reader&quot;&gt;S3Reader&lt;/a&gt; now supports non-US buckets when useSubdomains=&quot;true&quot;. The default is false for compatibility with legacy buckets.&lt;/li&gt;
      &lt;li&gt;When an empty stream is passed to the ImageResizer, a more informative message is used in the exception.&lt;/li&gt;
      &lt;li&gt;Null values assigned to querystring keys during the Rewrite event no longer block default values assigned in the RewriteDefaults event.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;New destination path syntax&lt;/h2&gt;
      
      &lt;p&gt;Tired of doing path math? You can now do most renaming tasks with a simple syntax instead of writing your own string logic.&lt;/p&gt;
      
      &lt;p&gt;Uploading a file with a GUID filename is now much simpler:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;ImageJob i = new ImageJob(file, &quot;~/uploads/&amp;lt;guid&amp;gt;.&amp;lt;ext&amp;gt;&quot;, new ResizeSettings(&quot;width=1600&quot;));&amp;#x000A;i.CreateParentDirectory = true; //Auto-create the uploads directory.&amp;#x000A;i.Build();&amp;#x000A;&lt;/code&gt;&lt;/pre&gt;
      
      &lt;h3&gt;List of variables&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&amp;lt;guid&gt; - lowercase hexadecimal GUID with no dashes or brackets&lt;/li&gt;
      &lt;li&gt;&amp;lt;ext&gt; - the correct extension for the file based on how it will be encoded&lt;/li&gt;
      &lt;li&gt;&amp;lt;filename&gt; - the original filename (minus folder and extension)&lt;/li&gt;
      &lt;li&gt;&amp;lt;path&gt; - the original path (dir and filename) without the original extension.&lt;/li&gt;
      &lt;li&gt;&amp;lt;originalext&gt; - the original extension&lt;/li&gt;
      &lt;li&gt;&amp;lt;width&gt; - the final width of the written image&lt;/li&gt;
      &lt;li&gt;&amp;lt;height&gt; - the final height of the written image&lt;/li&gt;
      &lt;li&gt;&amp;lt;settings.*&gt; - any value from the settings used to resize it.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;Filtering (alpha)&lt;/h3&gt;
      
      &lt;p&gt;You can also filter values&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&amp;lt;filename:A-Za-z0-9_-&gt; - Will keep only alphanumerics, dashes, and underscores from the filename.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;This can be useful, as uploaded filenames are usually unacceptable for use on the server, even when combined with a guid.&lt;/p&gt;
      
      &lt;h2&gt;New plugins &amp;amp; cool features&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Jason Morse brought us the &lt;a href=&quot;http://imageresizing.net/plugins/pdfrenderer&quot;&gt;PdfRenderer plugin&lt;/a&gt;, which I promptly reviewed and tested, and decided to include immediately due to its great code quality.&lt;/li&gt;
      &lt;li&gt;The extremely boring &lt;a href=&quot;http://imageresizing.net/plugins/iepngfix&quot;&gt;IEPngFix plugin&lt;/a&gt;, for those who still care about IE6.&lt;/li&gt;
      &lt;li&gt;It's official, you can now use 'w' and 'h' instead of 'width' and 'height'. 9 less characters to type!&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/presets&quot;&gt;Presets plugin&lt;/a&gt; now works with managed API as well as URL API. (Managed API does not enforce the OnlyAllowPresets setting).&lt;/li&gt;
      &lt;li&gt;The ImageResizer can now 'auto-create' the parent directory for an image it is writing. Use ImageJob and set &lt;code&gt;CreateParentDirectory&lt;/code&gt; to true. Nice for uploads.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Boring new stuff&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added ResizeSettings.CropXUnits and ResizeSettings.CropYUnits&lt;/li&gt;
      &lt;li&gt;Added ResizeSetting constructor that accepts width, height, FitMode, and image format.&lt;/li&gt;
      &lt;li&gt;PrettyGifs: Added preservePalette setting.&lt;/li&gt;
      &lt;li&gt;ImageJob: added Stream-&gt;Stream constructor overload&lt;/li&gt;
      &lt;li&gt;ImageHandlerSyntax: Now &amp;amp;mode can be used even in the image handler syntax.&lt;/li&gt;
      &lt;li&gt;Diagnostics page now reports on trust level and incompatible assemblies.&lt;/li&gt;
      &lt;li&gt;Improved error reporting for plugins that subclass VirtualPathProvider on GoDaddy hosting.&lt;/li&gt;
      &lt;li&gt;PathUtils: Added GuessVirtualPath and GenerateImageUrl&lt;/li&gt;
      &lt;li&gt;Added Config.Current.Pipeline.ModuleInstalled variable.&lt;/li&gt;
      &lt;li&gt;PathUtils.MapPathIfAppRelative, ResolveVariablesInPath, and RemoveNonMatchingChars were added as supporting methods for the dest path syntax.&lt;/li&gt;
      &lt;li&gt;You can turn off the new destination path syntax with ImageJob.AllowDestinationPathVariables = false&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Changes that may break your build.&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;ImageJob.DisposeSourceStream was renamed to DisposeSourceObject as the previous name was incorrect; both Bitmaps and Streams are disposed by it. It's unlikely many people use this property already as it was only recently introduced.&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2012-01-14T00:00:00+00:00</published>
    <updated>2012-01-14T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.1 alpha 2 - Dec 7 2011</title>
    <link href='http://imageresizing.net/releases/3-1-alpha-2' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-12-07:/releases/3-1-alpha-2</id>
    <content type='html'>
      &lt;p&gt;This is the first public release of 3.1. It's a major milestone, involving over 229 commits, introducing 11 new plugins, and bringing majorly cool features or overhauls to 10 existing plugins. Please contact support@imageresizing.net with any bugs or suggestions about this release.&lt;/p&gt;
      
      &lt;p&gt;In fact, to encourage everyone to actively look for bugs and report them, I'm &lt;strong&gt;currently offering a $5-$50 bounty per bug you find and report before anyone else&lt;/strong&gt;! Most bug reports are firmly in the $5 category, but a security hole or memory leak could net you $50 for the one bug. Payments sent via PayPal. All class libraries whose names start with ImageResizer are eligible. Email bug reports to &lt;code&gt;support@imageresizing.net&lt;/code&gt;.&lt;/p&gt;
      
      &lt;p&gt;Please &lt;a href=&quot;http://resizer.uservoice.com/forums/108373-image-resizer-v3&quot;&gt;visit the idea forum&lt;/a&gt; and share any new plugin ideas or features you don't see listed in this release or on the forums.&lt;/p&gt;
      
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-0-13&quot;&gt;3.0.13 (Oct 12)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;p&gt;As nearly all plugins were modified in this release, please refer to the individual plugin-specific sections below to see how you might be affected.&lt;/p&gt;
      
      &lt;p&gt;Version 3.1 adds the following &lt;em&gt;free&lt;/em&gt; plugins:&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/speedorquality&quot;&gt;SpeedOrQuality&lt;/a&gt; - Sacrifice quality for 10-40% more speed. Still in alpha.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/defaultsettings&quot;&gt;DefaultSettings&lt;/a&gt; - Decide which ScaleMode setting should be the default, and for which situations. Many people find the &amp;amp;scale=downscaleonly default value frustrating - now they can change it.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/presets&quot;&gt;Presets&lt;/a&gt; - Create preset setting groups in Web.config and use them from the URL.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/autorotate&quot;&gt;AutoRotate&lt;/a&gt; - Automatically rotate the image based on the camera's gravity sensor data, with &lt;code&gt;&amp;amp;autorotate=true&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/logging&quot;&gt;Logging&lt;/a&gt; - NLog wrapper to allow optional logging. Logging only implemented for DiskCache plugin at the moment.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;The Design bundle gets the these new plugins. If you've already bought the Design bundle, you get these for free!&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/wic&quot;&gt;WicEncoder&lt;/a&gt; - Encode jpegs with adjustable quality and subsampling settings. Encode GIFs and 8-bit PNGs with adjustable palette size and bit depth.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/wic&quot;&gt;WicDecoder&lt;/a&gt; - Decode images using any WIC-enabled codec installed on the computer&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/wic&quot;&gt;WicBuilder&lt;/a&gt; - Provides a completely alternate pipeline, which supports most basic resize/crop/pad operations. 2-4x faster than the default pipeline. Enable on a per-request basis using &lt;code&gt;builder=wic&lt;/code&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/freeimage&quot;&gt;FreeImageResizer&lt;/a&gt; - Adds support for Lanczos3 and CatmullRom scaling algorithms: &amp;amp;fi.scale=bicubic|bilinear|box|bspline|catmullrom|lanczos command&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;The Extras bundle is introduced, and starts out with the following 2 plugins&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/batchzipper&quot;&gt;BatchZipper&lt;/a&gt; - Asynchronously generated .zip archives of files and resized images. Great for providing customized downloads to customers.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://imageresizing.net/plugins/psdcomposer&quot;&gt;PsdComposer&lt;/a&gt; - Dynamically edit and render PSD files - turn layers on and off, edit text layer contents, and apply certain effects.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;FriendlyUrls reminder&lt;/h3&gt;
      
      &lt;p&gt;If you are still using the FriendlyUrls plugin, &lt;a href=&quot;http://imageresizing.net/plugins/friendlyurls&quot;&gt;you need to rename it in Web.config - it has been part of the core for 3 releases now as FolderResizeSyntax&lt;/a&gt;, and is no longer included as a separate dll.&lt;/p&gt;
      
      &lt;h2&gt;Cool new features in the ImageResizer.dll core project&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;code&gt;mode=max|pad|crop|stretch|carve&lt;/code&gt; provides a single command to control how aspect ratio changes are handled. It doesn't introduce new features, but is easier to remember than &lt;code&gt;maxwidth&lt;/code&gt; vs &lt;code&gt;width&lt;/code&gt;, &lt;code&gt;crop=auto&lt;/code&gt;, &lt;code&gt;stretch=fill&lt;/code&gt;, and &lt;code&gt;carve=true&lt;/code&gt;. Although, as always, everything is fully backwards-compatible. Example: &lt;code&gt;?maxwith=10&amp;amp;maxheight=10&lt;/code&gt; is equivalent to &lt;code&gt;?width=10&amp;amp;height=10&amp;amp;mode=max&lt;/code&gt;.&lt;/li&gt;
      &lt;li&gt;Control how images are cropped or padded (when the aspect ratio is being modified) using the &lt;code&gt;anchor&lt;/code&gt; command:  &amp;amp;anchor=topleft|bottomright|middlecenter...&lt;/li&gt;
      &lt;li&gt;You can now rotate the source image in 90 degree intervals using &lt;code&gt;sRotate&lt;/code&gt;. This is useful if you'd like to rotate prior to doing a manual crop.&lt;/li&gt;
      &lt;li&gt;The new &lt;code&gt;ImageBuilder.Build(Job job)&lt;/code&gt; overload allows you more control over how streams are handled - you can even choose to dispose the destination stream when the job is complete, or restore the position of the original stream.&lt;/li&gt;
      &lt;li&gt;You can now specify individual left, top, right, and bottom edge widths for margin, borderWidth, and paddingWidth values. I.e, &lt;code&gt;?margin=10,20,10,20&amp;amp;borderWidth=50,10,50,10&amp;amp;borderColor=blue&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Boring new features in ImageResizer.dll&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Set the print density of an output image with &lt;code&gt;&amp;amp;dpi=96|300|600&lt;/code&gt;. No browsers support this, but a few printers do. Default is 96.  See &lt;a href=&quot;http://apptools.com/examples/dpi.php&quot;&gt;this article on why the DPI (resolution) setting is worthless&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Added performance optimization for resizing non-transparent to non-transparent images with no padding.&lt;/li&gt;
      &lt;li&gt;Diagnostics page has dozens of new checks to ensure you've configured everything for optimal performance.&lt;/li&gt;
      &lt;li&gt;&amp;amp;scale=down|up|canvas are newly supported shortcuts for downscaleonly,  upscaleonly, and upscalecanvas&lt;/li&gt;
      &lt;li&gt;You can now perform a source flip on an image using &lt;code&gt;sFlip&lt;/code&gt; instead of &lt;code&gt;sourceFlip&lt;/code&gt;, although the longer name is also supported.&lt;/li&gt;
      &lt;li&gt;ResizeSetting now accepts semicolon-delimited pairs in its constructor: &lt;code&gt;new ResizeSettings(&quot;width=100;height=100&quot;)&lt;/code&gt; Yay for readability!&lt;/li&gt;
      &lt;li&gt;You can now both perform a manual crop, then autocrop the result to a specified with and height. I.e. &lt;code&gt;image.jpg?crop=400,10,-10,-10&amp;amp;width=100&amp;amp;height=100&amp;amp;mode=crop&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;For a list of API changes that affect plugin developers, see the bottom of the page.&lt;/p&gt;
      
      &lt;h2&gt;The last surviving GDI+ artifact, dead&lt;/h2&gt;
      
      &lt;p&gt;After 3 years of wrestling with the last GDI+ border bug (the 50% transparency white 1px border on resized images), it has finally been killed!&lt;/p&gt;
      
      &lt;p&gt;With the introduction of the WIC and FreeImage pipelines, I finally tried the border test on them as well, and guess what... All three had the the border artifact! Knowing that to be impossible, I checked the original photos, and it was there as well. Sometime in 2008, those photos were resized with V2.0, and acquired the border artifact. The last remaining GDI border bug was actually solved in V2.6, but since the border was already in the original images, it only showed up as a 25% reduction in brightness.&lt;/p&gt;
      
      &lt;p&gt;Chagrin would be the word. How could I ever fix a non-existent bug? I sure spent a lot of time trying...&lt;/p&gt;
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/diskcache&quot;&gt;DiskCache&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Greatly reduced CPU usage when autoClean=&quot;true&quot; (for certain rare situations).&lt;/li&gt;
      &lt;li&gt;Added beta support for async writes. Enable by setting &lt;code&gt;asyncWrites=true&lt;/code&gt; on the &lt;code&gt;&amp;lt;diskcache&amp;gt;&lt;/code&gt; element. The async buffer size defaults to a maximum of 10MB, but can be changed with the &lt;code&gt;asyncBufferSize&lt;/code&gt; setting (which is in bytes). Async writes can greatly improve performance if you have a slow, overloaded, or high-latency hard disk/SAN.&lt;/li&gt;
      &lt;li&gt;Fixed bug in LockProvider where a failed image resizing request would cause the lock provider to fail to remove the lock object for the request from the dictionary. If you have millions of failed requests during a single app pool cycle, this could cause reduced performance an higher RAM usage.&lt;/li&gt;
      &lt;li&gt;Added support for cooperative cache cleanup, using a mutex to prevent more than one processes from cleaning the same folder at the same time. Should help support extended overlapped recycles and web garden scenarios.&lt;/li&gt;
      &lt;li&gt;Added support for recovering from another process writing to the same cache file at the same time. Only works in &lt;code&gt;hashModifiedDate=true&lt;/code&gt; mode.&lt;/li&gt;
      &lt;li&gt;Added optional logging support so you can see exactly what is happening with the cache in real-time&lt;/li&gt;
      &lt;li&gt;Handles insufficient permissions more gracefully, explains issue on the diagnostics page&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/prettygifs&quot;&gt;PrettyGifs&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed bug where an OverflowException would occur when generating a GIF or 8-bit PNG file on a 64-bit server, but only when over 4GB of ram was in use.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/watermark&quot;&gt;Watermark&lt;/a&gt; plugin&lt;/h2&gt;
      
      &lt;p&gt;We admit, the original Watermark plugin was sad.&lt;/p&gt;
      
      &lt;p&gt;The new one isn't. Here are a few of the new features&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fully XML configurable. No more Global.asax.cs junk.&lt;/li&gt;
      &lt;li&gt;Full-featured text layers&lt;/li&gt;
      &lt;li&gt;Flexible image layers&lt;/li&gt;
      &lt;li&gt;Layer groups&lt;/li&gt;
      &lt;li&gt;Reference multiple groups or layers from the URL&lt;/li&gt;
      &lt;li&gt;Flexible layer layout system to shame even WPF. Anything is possible, and it's intuitive.&lt;/li&gt;
      &lt;li&gt;Overlay AND background layer support.&lt;/li&gt;
      &lt;li&gt;Image layers can use any virtual or physical file - even a generated gradient from the Gradient plugin!&lt;/li&gt;
      &lt;li&gt;Image layers can be pre-processed with the same pipeline... they can even have their own watermarks inside.&lt;/li&gt;
      &lt;li&gt;Text layers support both fixed and scale-to-fit font sizes, configurable font typefaces, and font styles.&lt;/li&gt;
      &lt;li&gt;Text layers support text outline and glow effects (even combined), all colors are configurable, and the text can be rotated to any angle.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;p&gt;Oh, and guess what - it's fully backwards compatible. You can take advantage of the new features while still supporting your old code and URLs. You can migrate your old code to the new XML syntax at your leisure. Your URLs don't ever need to be changed.&lt;/p&gt;
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/simplefilters&quot;&gt;SimpleFilters&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added support for combining multiple filters&lt;/li&gt;
      &lt;li&gt;Added adjustable grayscale conversion&lt;/li&gt;
      &lt;li&gt;Added brightness, contrast, and saturation adjustment settings (&quot;s.brightness&quot;, &quot;s.contrast&quot;, &quot;s.saturation&quot;)&lt;/li&gt;
      &lt;li&gt;Fixed broken sepia filter&lt;/li&gt;
      &lt;li&gt;Added invert filter&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/sizelimiting&quot;&gt;SizeLimiting&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Size limits are now inclusive instead of exclusive, to match normal user expectation&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/virtualfolder&quot;&gt;VirtualFolder&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now can fall back to IVirtualImageProvider&lt;/li&gt;
      &lt;li&gt;Handles insufficient permissions more gracefully, explains issue on the diagnostics page&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/freeimage&quot;&gt;FreeImage&lt;/a&gt;&lt;/h2&gt;
      
      &lt;h3&gt;Breaking changes&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;FreeImageEncoder no longer acts as the default encoder. To enable, use &lt;code&gt;encoder=freeimage&lt;/code&gt; in the request URL.&lt;/li&gt;
      &lt;li&gt;FreeImageBuilder is no longer activated via &amp;amp;freeimage=true. To activate, use &lt;code&gt;builder=freeimage&lt;/code&gt;.&lt;/li&gt;
      &lt;li&gt;FreeImageDecoder can be requested as the primary decoder with &lt;code&gt;decoder=freeimage&lt;/code&gt; instead of &lt;code&gt;freeimage=true&lt;/code&gt;. As always, it is a default fallback decoder if the other decoders can't handle the stream.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h3&gt;The good news&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Got a customized version of FreeImage based on libjpeg-turbo. 2-4x faster jpeg encoding and decoding!&lt;/li&gt;
      &lt;li&gt;Improved overall performance of non freeimage-related requests when a FreeImage plugin was installed by reordering some statements.&lt;/li&gt;
      &lt;li&gt;Now works with http:// source URLs when RemoteReader is installed.&lt;/li&gt;
      &lt;li&gt;Now works with COM clients such as ASP&lt;/li&gt;
      &lt;li&gt;FreeImageBuilder now supports all the standard 'source' and 'dest' formats (except Bitmap), plus all the standard parameters.&lt;/li&gt;
      &lt;li&gt;Added FreeImageResizer plugin, with &amp;amp;fi.scale=bicubic|bilinear|box|bspline|catmullrom|lanczos command. Uses GDI resizing afterwards for cases where stretching or rotation occurs. Useful if you need a high-quality upscaling algorithm or something a bit more specialized than GDI's 2-pass bicubic algorithm.&lt;/li&gt;
      &lt;li&gt;FreeImageBuilder longer rescales image unless needed.&lt;/li&gt;
      &lt;li&gt;FreeImageEncoder now supports &lt;code&gt;quality=10|25|50|75|100&lt;/code&gt;, &lt;code&gt;subsampling=444|422|420|411&lt;/code&gt;, and &lt;code&gt;progressive=true&lt;/code&gt; for adjusting jpeg encoding!&lt;/li&gt;
      &lt;li&gt;FreeImageDecoder and FreeImageBuilder now support &amp;amp;autorotate=true&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/cloudfront&quot;&gt;CloudFront&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now supports (optional) automatic redirection - change a setting to redirect all image traffic through a CloudFront distribution. &lt;code&gt;&amp;lt;cloudfront redirectThrough=&quot;http://cdn.mysite.com/&quot; redirectPermanent=&quot;false /&quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;Fixed bug - now handles folders with a '.' in them properly, i.e, /folder.ext/file.ext;width=100 (ASP.NET's PathInfo madness...).&lt;/li&gt;
      &lt;li&gt;Now merges query strings during PreAuthorizeEvent instead of at RewriteDefaults, which should be more expected.&lt;/li&gt;
      &lt;li&gt;Now plays nice with other PreRewritePath and ModifiedQueryString stuff that may be registered.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/sqlreader&quot;&gt;SqlReader&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now completely configurable via XML&lt;/li&gt;
      &lt;li&gt;Added RequireImageExtension, CacheUnmodifiedFiles, and UntrustedData settings&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;Also added complete XML configurability.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;Can now fallback to IVirtualImageProvider if security restrictions prevent it registering as a VirtualPathProvider. Or, you can manually request it only register as an IVirtualPathProvider by setting &lt;code&gt;vpp=&quot;false&quot;&lt;/code&gt;. IVirtualImageProviders can only provide files to the image resizer.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;Fixed infinite loop triggered by handling the BeforeAccess event (stupid typo)&lt;/li&gt;
      &lt;li&gt;SqlReader: Added Settings property to allow easy access to configuration.&lt;/li&gt;
      &lt;li&gt;Renamed methods to indicate they are ready for public consumption.
      .authorize -&gt; .FireAuthorizeEvent
      .getStream -&gt; .GetStream
      .getIdParameter -&gt; .CreateIdParameter
      .rowExists -&gt; .RowExists
      .getDateModifiedUtc -&gt; GetDateModifiedUtc
      .getIdFromPath -&gt; ParseIdFromVirtualPath&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/azurereader&quot;&gt;AzureReader&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Can now fallback to IVirtualImageProvider if security restrictions prevent it registering as a VirtualPathProvider. Or, you can manually request it only register as an IVirtualPathProvider by setting &lt;code&gt;vpp=&quot;false&quot;&lt;/code&gt;. IVirtualImageProviders can only provide files to the image resizer.&lt;/li&gt;
      &lt;li&gt;Can now use lazy blob existence checking to increase performance. Use &lt;code&gt;lazyExistenceCheck=true&lt;/code&gt; to enable (warning: untested).&lt;/li&gt;
      &lt;li&gt;Fixed bug where 'prefix' values not starting in ~ or / wouldn't be handled correctly.&lt;/li&gt;
      &lt;li&gt;Fixed bug where images outside the prefix directory were assumed to be image files&lt;/li&gt;
      &lt;li&gt;Now a nuget package&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/s3reader&quot;&gt;S3Reader&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Can now fallback to IVirtualImageProvider if security restrictions prevent it registering as a VirtualPathProvider. Or, you can manually request it only register as an IVirtualPathProvider by setting &lt;code&gt;vpp=&quot;false&quot;&lt;/code&gt;. IVirtualImageProviders can only provide files to the image resizer.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/remotereader&quot;&gt;RemoteReader&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;RemoteReader: Now overrides GetStream() instead of PreLoadImage() so that it can be used across all pipelines. Added support for underscores instead of periods in the domain name of the 'friendly' syntax. Allows users to avoid peculiar IIS configurations.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/imagehandlersyntax&quot;&gt;ImageHandlerSyntax&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;WebImageResizer compatibility - now supports grayscale and invert commands when the SimpleFilters plugin is installed.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;&lt;a href=&quot;http://imageresizing.net/plugins/logging&quot;&gt;Logging&lt;/a&gt;&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;New Logging system - the Config.Current.Plugins.LogManager property and the Config.Current.Plugins.LoggingAvailable event allow plugins to support logging without having NLog as a dependency.&lt;/li&gt;
      &lt;li&gt;New Logging plugin provides an NLog-based implementation of the logging system. This allows logging to be supported, but not required - no extra dependencies or overhead unless you add the Logging plugin!.&lt;/li&gt;
      &lt;li&gt;The DiskCache plugin now supports detailed (optional) logging. Enabled by setting &lt;code&gt;&amp;lt;diskcache logging=&quot;true&quot;/&amp;gt;&lt;/code&gt;, installing the Logging plugin, and configuring NLog.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;Core API changes&lt;/h1&gt;
      
      &lt;h2&gt;Breaking API changes that affect nobody&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;The ImageBuilder.Create() and ImageBuilder constructors now require 2 additional arguments, &quot;IVirtualImageProvider virtualFileProvider&quot; and &quot;ISettingsModifier settingsModifier&quot;. As the ImageBuilder class shouldn't be created directly, this change should not affect anyone. Only subclasses of ImageBuilder should be affected - they will need to modify their constructors, .Create(), and .Copy() methods to include this new parameter. This change does not affect plugins or user code - only ImageBuilder subclasses (of which there are currently none).&lt;/li&gt;
      &lt;li&gt;Removed unused constructor overload ImageBuilder(IEncoderProvider encoderProvider, IVirtualImageProvider virtualFileProvider) as it didn't offer anything new, and added to cost of implementing a subclass.&lt;/li&gt;
      &lt;li&gt;The internal class BitmapHolder is no more. It has been replaced by ImageJob&lt;/li&gt;
      &lt;li&gt;Non-breaking change: Config.Pipeline.GetFile now always returns an IVirtualFile instance, instead of an object which could either be a VirtualFile or IVirtualFile instance.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;API additions&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;New class ImageJob - A class to contain all the parameters of a job. Makes alternate pipeline support easier.&lt;/li&gt;
      &lt;li&gt;Added ImageBuilder.Build(Job job) overload. All other overloads now funnel through this method, and subsequently through extensible protected method BuildJob()&lt;/li&gt;
      &lt;li&gt;ImageBuilder.LoadImage has a new overload with a 3rd parameter, restoreStreamPosition.&lt;/li&gt;
      &lt;li&gt;New method for converting 99% of the 'source' object types into a stream: Stream ImageBuilder.GetStreamFromSource(object source, ResizeSettings settings, ref bool disposeStream, out string path, out bool restoreStreamPosition); Plugins can extend by subclassing BuilderExtension and overriding protected method GetStream (same parameters). This method makes it easier to build replacement pipelines.&lt;/li&gt;
      &lt;li&gt;ImageBuilder, AbstractImageProcessor: Added PostDecodeStream() method, called at end of LoadImage method. Used by AutoRotate&lt;/li&gt;
      &lt;li&gt;ImageResizer.Configuration.Logging namespace - ILogManager, ILogger, ILoggerProvider and PluginConfig support mean that the ImageResizer can support any logging library - with no extra dependencies.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Extensibility additions&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;p&gt;Alternate pipelines can now be implemented as BuilderExtension plugins instead of being forced to subclass ImageBuilder.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;AbstractImageProcessor: Added &lt;code&gt;protected virtual RequestedAction BuildJob(ImageResizer.ImageJob job)&lt;/code&gt; Enables replacement pipelines to be implemented as a plugin.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;AbstractImageProcessor: Added &lt;code&gt;protected virtual Stream GetStream(object source, ResizeSettings settings, ref bool disposeStream, out string path, out bool restoreStreamPosition)&lt;/code&gt; Allows RemoteReader and similar plugins to support alternate pipelines.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;ISettingsModifier plugins are now supported, and allow modified of resizing settings without subclassing BuilderExtension.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Minor bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Plugins missing a constructor don't crash the request, just log an issue.&lt;/li&gt;
      &lt;li&gt;If a plugin throws an exception during GetIssues, it is now logged as an issue instead of crashing the resizer.debug page.&lt;/li&gt;
      &lt;li&gt;Earlier disposal of Pen and Brush instances used for rendering image padding, borders, and drop shadow.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Deprecated&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;ImageResizer.StretchMode and ImageResizer.CropMode are deprecated, and have been replaced by ImageResizer.FitMode&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2011-12-07T00:00:00+00:00</published>
    <updated>2011-12-07T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.0.13 - Oct 12 2011</title>
    <link href='http://imageresizing.net/releases/3-0-13' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-10-12:/releases/3-0-13</id>
    <content type='html'>
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-0-12&quot;&gt;3.0.12 (Aug 15)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;h2&gt;Manual steps for users of the FriendlyUrls plugin&lt;/h2&gt;
      
      &lt;p&gt;Version 3.0.13 does not include &lt;code&gt;ImageResizer.Plugins.FriendlyUrls.dll&lt;/code&gt;! The FriendlyUrls plugin is now included in &lt;code&gt;ImageResizer.dll&lt;/code&gt;, and has been renamed to &lt;code&gt;FolderResizeSyntax&lt;/code&gt;. This change reduces the number of dlls you need to deploy, and simplifies migration for v2 customers.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Change &lt;code&gt;&amp;lt;add name=&quot;FriendlyUrls&quot; /&amp;gt;&lt;/code&gt; to &lt;code&gt;&amp;lt;add name=&quot;FolderResizeSyntax&quot; /&amp;gt;&lt;/code&gt; in Web.config and remove &lt;code&gt;ImageResizer.Plugins.FriendlyUrls&lt;/code&gt; through Project References, /bin/, or nuget.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;New features&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;New alpha &lt;a href=&quot;http://imageresizing.net/plugins/freeimage&quot;&gt;FreeImageDecoder plugin&lt;/a&gt; introduces support for RAW &amp;amp; HDR image formats, such as CRW/CR2, NEF, RAF, DNG, MOS, KDC, DCR, etc. Also introduced support for XBM, XPM, TARGA, SGI, Sun RAS, PSD, PICT, PNG, PFM, PBM, PGM, PPM, PCX, MNG, Kodak PhotoCD, KOALA, JPEG-2000, JIF, JNG, IFF, ICO, Raw Fax G3, EXR, DDS, and Dr. Halo CUT files.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed: Using the &amp;amp;404 command without any other resizing commands would cause the image to be re-encoded needlessly.&lt;/li&gt;
      &lt;li&gt;Fixed: Converting a transparent PNG or GIF to jpeg format would cause the transparent areas to become black unless otherwise specified. Now defaults to white.&lt;/li&gt;
      &lt;li&gt;Fixed: RemoteReaderPlugin was modifying the cache key incorrectly, causing different remote URLs to be cached as the same request.&lt;/li&gt;
      &lt;li&gt;Fixed: DiskCache; setting subfolders=1 no longer causes config error - behaves as subfolders=0&lt;/li&gt;
      &lt;li&gt;Fixed: Watermark plugin would display decreasingly smaller watermarks.&lt;/li&gt;
      &lt;li&gt;Fixed in ClientCache plugin: On a web server serving images from another file server, when the servers' clocks are not synchronized, and images are served within the time offset (between the servers) from when they are created. Symptoms: ArgumentOutOfRangeException. Fault: Overzealous ASP.NET framework code. Extremely rare.&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2011-10-12T00:00:00+00:00</published>
    <updated>2011-10-12T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.0.12 - Aug 15 2011</title>
    <link href='http://imageresizing.net/releases/3-0-12' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-08-15:/releases/3-0-12</id>
    <content type='html'>
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-0-11&quot;&gt;3.0.11 (Jul 28)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;h2&gt;Upgrade steps for users of the FriendlyUrls plugin&lt;/h2&gt;
      
      &lt;p&gt;Make sure you perform the following step before upgrading to 3.0.13, as &lt;code&gt;ImageResizer.Plugins.FriendlyUrls.dll&lt;/code&gt; will not be included in the next version.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Change &lt;code&gt;&amp;lt;add name=&quot;FriendlyUrls&quot; /&amp;gt;&lt;/code&gt; to &lt;code&gt;&amp;lt;add name=&quot;FolderResizeSyntax&quot; /&amp;gt;&lt;/code&gt; in Web.config and remove &lt;code&gt;ImageResizer.Plugins.FriendlyUrls&lt;/code&gt; from Project References, /bin/, or nuget.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;New features&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added new &lt;a href=&quot;http://imageresizing.net/plugins/whitespacetrimmer&quot;&gt;WhitespaceTrimmer&lt;/a&gt; plugin to Design bundle. (Also on NuGet)&lt;/li&gt;
      &lt;li&gt;Added new &lt;a href=&quot;http://imageresizing.net/plugins/imagehandlersyntax&quot;&gt;ImageHandlerSyntax&lt;/a&gt; plugin to Core. (Provides URL syntax compatibility with 4 other image resizing handlers)&lt;/li&gt;
      &lt;li&gt;Added new &lt;a href=&quot;http://imageresizing.net/plugins/mvcroutingshim&quot;&gt;MvcRoutingShim&lt;/a&gt; plugin to Core.Mvc, in the ImageResizer.Mvc.dll assembly. (Allows MVC routing to be disabled for certain requests - useful when routes are interfering with images).&lt;/li&gt;
      &lt;li&gt;Added NuGet packages for Watermark, BatchZipper, WhitespaceTrimmer, and ImageResizer.Mvc&lt;/li&gt;
      &lt;li&gt;Added dlls\release\COMInstaller.exe for quick and accurate COM installation.&lt;/li&gt;
      &lt;li&gt;Added SampleAspSite project for ASP users.&lt;/li&gt;
      &lt;li&gt;Added a copy of the &lt;a href=&quot;http://imagestudio.codeplex.com&quot;&gt;ImageStudio&lt;/a&gt; project in the Contrib folder. The ImageStudio project now uses the ImageResizer to perform image manipulation, resulting in higher-quality images.&lt;/li&gt;
      &lt;li&gt;AdvancedFilters now has experimental support for oil painting filters, noise removal, histogram equalization, contrast, brightness, and saturation adjustment. These features may disappear, change, or be modified based on feedback. Share yours.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;API additions/changes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;New method RemoteReaderPlugin.CreateSignedUrlWithKey(string remoteUrl, string settings, string key) allows COM clients (such as ASP) to generate signed URLs.&lt;/li&gt;
      &lt;li&gt;Config.Current.BuildImage() now creates the destination directory if it is missing, as a convenience for COM clients. ImageBuilder.Current.Build() does not do this.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Significant bug fixes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Core: Now works in low-trust on .NET 4. Fixed &quot;&lt;a href=&quot;http://stackoverflow.com/questions/6919808/why-does-this-line-cause-a-verificationexception-when-running-under-net-4&quot;&gt;VerificationException: Operation could destabilize the runtime&lt;/a&gt;&quot; error.&lt;/li&gt;
      &lt;li&gt;Core: Diagnostics page now works in low-trust, thanks to Jesse Ehrenzweig's patches! Also thanks to Jesse, there are now far few compiler warnings!&lt;/li&gt;
      &lt;li&gt;SeamCarving: Now works through Build() as well as the URL syntax.  &amp;amp;carve=true was previously only accessible through the URL syntax.&lt;/li&gt;
      &lt;li&gt;SeamCarving: Now maintains transparency for GIF and 8-bit PNG images. 32-bit PNG images still lose most of their alpha channel due to limitations in CAIR.EXE.&lt;/li&gt;
      &lt;li&gt;AnimatedGifs: Fixed bug where animated (but non-looping) gifs would start looping in certain browsers.&lt;/li&gt;
      &lt;li&gt;SimpleFilters: Brightness adjustments no long cause color inversions on overexposed photographs&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Insignificant bug fixes&lt;/h2&gt;
      
      &lt;p&gt;The bugs that nobody has probably ever encountered, but were turned up by comprehensive unit testing.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Core: Fixed NotImplemetedException when &amp;amp;borderWidth is negative&lt;/li&gt;
      &lt;li&gt;Core: Fixed exception when &amp;amp;paddingColor is specified but &amp;amp;paddingWidth is not used.&lt;/li&gt;
      &lt;li&gt;Core: Fixed bug where &amp;amp;margin= would not be applied unless other commands were present.&lt;/li&gt;
      &lt;li&gt;AdvancedFilters: Fixed: &amp;amp;sharpen and &amp;amp;blur were not taking effect unless used with other commands.&lt;/li&gt;
      &lt;li&gt;DropShadow: Fixed bug where ImageBuilder.GetFinalSize() causes a NullReferenceException when &amp;amp;shadowWidth or &amp;amp;shadowColor is used&lt;/li&gt;
      &lt;li&gt;AdvancedFilters: Fixed NullReferenceException when ImageBuilder.GetFinalSize() is called and &amp;amp;blur or &amp;amp;sharpen is specified&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2011-08-15T00:00:00+00:00</published>
    <updated>2011-08-15T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3.0.11 - July 29 2011</title>
    <link href='http://imageresizing.net/releases/3-0-11' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-07-29:/releases/3-0-11</id>
    <content type='html'>
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-alpha-10&quot;&gt;3.0.10 (Jun 16)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;h1&gt;New features&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added &lt;a href=&quot;http://imageresizing.net/plugins/seamcarving&quot;&gt;SeamCarving&lt;/a&gt; plugin, uses C++ CAIR.EXE underneath. Requires full trust.&lt;/li&gt;
      &lt;li&gt;Added &lt;a href=&quot;http://imageresizing.net/plugins/remotereader&quot;&gt;RemoteReader&lt;/a&gt; plugin. Allows images located on external sites/servers to be processed and resized using both the URL and managed APIs.&lt;/li&gt;
      &lt;li&gt;ImageResizingGUI and BatchZipper are now 200KB lighter (using Ionc.Ziplib.Reduced version)&lt;/li&gt;
      &lt;li&gt;Build() now supports HttpPostedFileBase as a valid source.&lt;/li&gt;
      &lt;li&gt;Build() now supports byte[] as a valid source.&lt;/li&gt;
      &lt;li&gt;There are now &lt;a href=&quot;http://imageresizing.net/docs/nuget&quot;&gt;NuGet packages&lt;/a&gt; for 12 of the 14 plugins. AzureReader and Watermark do not yet have NuGet packages.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;Bug fixes&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed bug in StreamUtils - was causing Build() to fail on non-seekable source streams. Added unit test.&lt;/li&gt;
      &lt;li&gt;The incorrect file type was being guessed for png and gif images that (a) didn't have a file extension, or (b) were loaded directly from a stream.
        This was also causing AnimatedGif resizing to crash completely. The source was a .NET framework bug:
        &lt;code&gt;ImageFormat.Gif.Equals(f)&lt;/code&gt; evaluates to &lt;code&gt;true&lt;/code&gt;, yet    &lt;code&gt;ImageFormat.Gif == f&lt;/code&gt; evaluates to &lt;code&gt;false&lt;/code&gt;. Switched to using .Equals().&lt;/li&gt;
      &lt;li&gt;AnimatedGif plugin no longer closes the source stream incorrectly.&lt;/li&gt;
      &lt;li&gt;Fixed bug in LoadImage: HttpPostedFileBase stream is returned to its original position after use.&lt;/li&gt;
      &lt;li&gt;Fixed several bugs in Samples\ImageResizerGUI&lt;/li&gt;
      &lt;li&gt;Added lots of tests for new functionality&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;API additions&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added URL-safe base 64 encoding and decoding methods to PathUtils.&lt;/li&gt;
      &lt;li&gt;Added PolygonMath.ScaleOutside and PolygonPath.getParallelogramSize&lt;/li&gt;
      &lt;li&gt;Modified BuilderExtension.PreLoadImage to include path and disposeStream parameters. If you are overriding this method, you will need to change your code.&lt;/li&gt;
      &lt;li&gt;LoadImage now supports byte[] arrays.&lt;/li&gt;
      &lt;/ul&gt;
    </content>
    <published>2011-07-29T00:00:00+00:00</published>
    <updated>2011-07-29T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3 alpha 10 - Jun 16 2011</title>
    <link href='http://imageresizing.net/releases/3-alpha-10' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-06-16:/releases/3-alpha-10</id>
    <content type='html'>
      &lt;p&gt;&lt;a href=&quot;http://downloads.imageresizing.net/Resizer3-alpha-10-full-Jun-16-2011.zip&quot; class=&quot;awesome green&quot;&gt;Download source, binaries, and sample code (7MB)&lt;/a&gt;&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://downloads.imageresizing.net/Resizer3-alpha-10-min-Jun-16-2011.zip&quot; class=&quot;awesome black&quot;&gt;Download core binary only (100K)&lt;/a&gt;&lt;/p&gt;
      
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-alpha-9&quot;&gt;alpha 9 (Jun 8)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;h1&gt;Bug fixes&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Fixed bug in ImageBuilder.Build() - ArgumentException if Build() is called twice on the same HttpPostedFile instance (due to stream being disposed).  LoadImage() no longer disposes the HttpPostedFile instance, and even restores the position of the stream afterwards.&lt;/li&gt;
      &lt;li&gt;DiskCache: Fixed bug where cached files were not being re-used when hashModifiedDate=true or when using S3Reader in fast mode.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;New features&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added new overload: string Build(object source, object dest, ResizeSettings settings, bool disposeSource, bool addFileExtension)
      Now you don't have to calculate file extensions when saving a resized image to disk - simply pass an extension-less path to 'dest' and get the resulting physical path back from the overload.&lt;/li&gt;
      &lt;li&gt;VirtualFolder now supports multiple instances (you can create multiple virtual folders now)&lt;/li&gt;
      &lt;li&gt;Added first draft of AzureReader (Created by Wouter Alberts with a bit of help from me). Can be found in the Contrib folder.&lt;/li&gt;
      &lt;li&gt;Added PathUtils.RemoveExtension and PathUtils.RemoveFullExtension&lt;/li&gt;
      &lt;li&gt;S3Reader: Added support for useSsl, accessKeyId, and secretAccessKeyId configuration in Web.config. Changed includeModifiedDate setting to checkForModifiedFiles .&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;New examples&lt;/h1&gt;
      
      &lt;ul&gt;
      &lt;li&gt;ComplexWebApplication: Added example watermarking based on folder and output image size&lt;/li&gt;
      &lt;li&gt;ComplexWebApplication: Added example on how to generate multiple image versions during upload.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h1&gt;NuGet Packages&lt;/h1&gt;
      
      &lt;p&gt;There are now &lt;a href=&quot;http://nuget.org&quot;&gt;NuGet&lt;/a&gt; packages for 8 of the 12 paid plugins, as well as 2 packages for the core and 1 sample project.&lt;/p&gt;
    </content>
    <published>2011-06-16T00:00:00+00:00</published>
    <updated>2011-06-16T00:00:00+00:00</updated>
  </entry>
  <entry>
    <title>Resizer 3 alpha 9 - Jun 8 2011</title>
    <link href='http://imageresizing.net/releases/3-alpha-9' rel='alternate' type='text/html' />
    <id>tag:imageresizing.net,2011-06-08:/releases/3-alpha-9</id>
    <content type='html'>
      &lt;p&gt;&lt;a href=&quot;http://downloads.imageresizing.net/Resizer3-alpha-9-full-Jun-8-2011.zip&quot; class=&quot;awesome green&quot;&gt;Download source, binaries, and sample code (6MB)&lt;/a&gt;&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://downloads.imageresizing.net/Resizer3-alpha-9-min-Jun-8-2011.zip&quot; class=&quot;awesome black&quot;&gt;Download core binary only (100K)&lt;/a&gt;&lt;/p&gt;
      
      &lt;h3&gt;Changes since &lt;a href=&quot;http://imageresizing.net/releases/3-alpha-8&quot;&gt;alpha 8 (Jun 2)&lt;/a&gt;&lt;/h3&gt;
      
      &lt;h2&gt;Fixed bugs&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Content-type &quot;image/jpeg&quot; would be sent for PNG and GIF images when 'format' was not specified.&lt;/li&gt;
      &lt;li&gt;Visiting the resizer.debug page would result in a NullReferenceException when the DiskCache was installed and autoClean=false or enabled=false was configured.&lt;/li&gt;
      &lt;li&gt;ResizeSettings: Setting CropTopLeft and CropTopRight had no effect, the values weren't saved. (Setting [&quot;crop&quot;] always worked).&lt;/li&gt;
      &lt;li&gt;Incorrect behavior when invalid (non-numeric) values were used for width, height, maxwidth, maxheight, shadowWidth, andgle, and rotate. The intended behavior was to interpret invalid values as 'unspecified'. Instead, they were interpreted as '0'.&lt;/li&gt;
      &lt;li&gt;Fixed potential NullReferenceException masking an ImageCorruptedException in LoadImage (wrong exception thrown).&lt;/li&gt;
      &lt;li&gt;ResizeSettings: Rotate no longer rounds values to the nearest integer.&lt;/li&gt;
      &lt;li&gt;ResizeSettings: Setting the BackgroundColor, PaddingColor, or BorderColor properties would cause the alpha portion of the assigned color to be ignored. Reading these properties when the underlying string values were invalid (like &quot;ghhaggee&quot;) could have caused an Exception to be thrown instead of returning Color.Transparent.&lt;/li&gt;
      &lt;li&gt;ClientCache.Uninstall() returned false, despite uninstalling correctly.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;New features&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Added support for image margins (outside the border and drop-shadow or other effect). Added ResizeSettings.Margin.&lt;/li&gt;
      &lt;li&gt;Added support for &lt;a href=&quot;http://imageresizing.net/docs/process-and-cache&quot;&gt;independent, separate control over caching and processing&lt;/a&gt;. (&amp;amp;cache=no/default/always, &amp;amp;process=no/default/always). This allows the DiskCache to be used for non-image data. For URLs without image extensions, however, you'll still need to add &lt;a href=&quot;http://imageresizing.net/docs/howto/cache-non-images&quot;&gt;a PostAuthorizeRequestStart handler&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;Added Pipeline.SkipFileTypeCheck, Pipeline.ModifiedQueryString, Pipeline.PreRewritePath so PostAuthorizeRequestStart can customize the processing and caching behavior.&lt;/li&gt;
      &lt;li&gt;Added ResizeSettings.ToString(). Better debugging!&lt;/li&gt;
      &lt;li&gt;Added ResizeSettings.Process property.&lt;/li&gt;
      &lt;li&gt;Added PathUtils.GetExtension().&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Potentially breaking API changes&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;ResizeSettings.get and .set are now protected instead of public, as they should have been originally.&lt;/li&gt;
      &lt;li&gt;protected variable ImageBuilder.encoderProvider is now _encoderProvider for CLS compliance.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;New features in SqlReader&lt;/h2&gt;
      
      &lt;ul&gt;
      &lt;li&gt;Now supports char, nchar, varchar, and nvarchar identifiers for images.&lt;/li&gt;
      &lt;li&gt;Now supports loading and caching non-image files from SQL binary columns.&lt;/li&gt;
      &lt;li&gt;SqlReaderSample: Added support for uploading and listing regular files. Added &quot;Remove all images&quot; button.&lt;/li&gt;
      &lt;li&gt;Now supports named connection strings so you don't have to duplicate configuration. Uses the &quot;ConnectionStrings:namedKey&quot; syntax like the ASP.NET declarative data source controls.&lt;/li&gt;
      &lt;li&gt;Now provides better diagnostics&lt;/li&gt;
      &lt;li&gt;SqlReaderSettings: Added VirtualPathPrefix readonly property, StripFileExtension boolean property, and IsIntType, IsStringType methods.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h2&gt;Tests&lt;/h2&gt;
      
      &lt;p&gt;The bug fixes of this release were primarily driven by unit test discoveries. Code coverage doubled with this release, and I'm aggressively adding regression tests for everything I fix.&lt;/p&gt;
      
      &lt;h3&gt;Remaining known bugs&lt;/h3&gt;
      
      &lt;p&gt;None. Isn't this when most people mark a product as stable?&lt;/p&gt;
    </content>
    <published>2011-06-08T00:00:00+00:00</published>
    <updated>2011-06-08T00:00:00+00:00</updated>
  </entry>
</feed>

