# نکات استفاده از افزونه‌ی Web Essentials جهت کار با تصاویر

در این مطلب نکات کار با تصاویر را توسط افزونه‌ی Web Esstentials بررسی می‌کنیم. این افزونه قابلیت‌های زیر را در کار با تصاویر در اختیار شما قرار می‌دهد: بهینه‌سازی تصاویر یکی از موارد مهمی که باید مورد

- Published: 2014-07-10
- Language: fa
- Tags: DNTips
- Canonical: https://sirwan.info/blog/fa/dntips-1833

---

> این نوشته نخستین بار در [دات‌نت تیپس](https://www.dntips.ir/post/1833) منتشر شده است.

<div class="postBody"><div>در این مطلب نکات کار با تصاویر را توسط افزونه‌ی Web Esstentials بررسی می‌کنیم. این افزونه قابلیت‌های زیر را در کار با تصاویر در اختیار شما قرار می‌دهد:</div> <div> <b>بهینه‌سازی تصاویر</b> </div> <div>یکی از موارد مهمی که باید مورد توجه قرار بگیرد، استفاده از تصاویر کم حجم در وب‌سایت می‌باشد. روش‌های مختلفی جهت بهینه‌سازی تصاویر مورد استفاده در سایت وجود دارند، به طور مثال جهت بهینه‌سازی تصاویر PNG می‌توانید از ابزار <a href="http://pnggauntlet.com/">PNGGauntlet</a> استفاده کنید. همچنین <a href="https://tinypng.com/">اینجا</a> نیز یک ابزار آنلاین موجود می‌باشد. افزونه‌ی Web Essentails این قابلیت را به آسانی در اختیار شما قرار می‌دهد؛ اینکار را می‌توانید توسط این افزونه به روش‌های زیر انجام دهید:</div> <div> <ul> <li> <span style="line-height: 1.5em; font-size: 9pt;">کلیک راست بر روی تصویر</span> <br/> </li> </ul> </div> <div>برای اینکار بر روی فایلی که می‌خواهید optimize کنید، کلیک راست کرده و از منوی ظاهر شده گزینه Web Essentials و سپس Optimize Image را انتخاب کنید:</div> <div> <p> <img src="/img/dntips/2f1d7553c256ab24c648.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div>در قسمت status bar نیز می‌توانید نتیجه را مشاهده کنید:</div> <div> <p> <img src="/img/dntips/b0796a6156efc99802ca.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div> <ul> <li> <span style="line-height: 1.5em; font-size: 9pt;">انتخاب چندین تصویر</span> <br/> </li> </ul> </div> <div>روال قبلی را می‌توانید برای چندین فایل انتخاب شده و یا یک پوشه تکرار کنید:</div> <div> <p> <img src="/img/dntips/9d18e3b9531e72554c09.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div> <ul> <li> <span style="line-height: 1.5em; font-size: 9pt;">بهینه‌سازی تصاویر موجود در فایل‌های CSS</span> <br/> </li> </ul> </div> <div>همچنین امکان بهینه‌سازی تصاویر داخل فایل‌های CSS نیز توسط این افزونه امکان پذیر است:</div> <div> <p> <img src="/img/dntips/8fe3a77e90a905a5ef6a.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div> <ul> <li>بهینه سازی تصاویر Base64 Encode</li> </ul> <div> <span style="line-height: 1.5em; font-size: 9pt;">توسط این افزونه می‌توانیم تصاویر </span> <a href="http://en.wikipedia.org/wiki/Data_URI_scheme" style="line-height: 1.5em; font-size: 9pt;">Data Uri</a> <span style="line-height: 1.5em; font-size: 9pt;"> را نیز بهینه سازی کنیم:</span> <br/> </div> <div> <span style="line-height: 1.5em; font-size: 9pt;"> <br/> </span> </div> <div> <p> <img src="/img/dntips/acfac2a513ad01ab6983.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> </div> <div>همانطور که در تصویر فوق مشاهده می‌کنید می‌توانیم تصاویری که به صورت Data Uri درون کد پیوست شده اند را با کلیک بر روی Save to file به صورت یک فایل ذخیره کنیم.</div> <div> <b> <br/>
ایجاد تصاویر Sprite</b> </div> <div>یکی دیگر ار قابلیت‌های افزونه Web Essentials امکان تهیه تصاویر به صورت <a href="http://css-tricks.com/css-sprites/">Sprite</a> می باشد. برای اینکار کافی است به این صورت عمل کنید:</div> <div> <p> <img src="/img/dntips/ca50d863071714ac60b7.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div>بعد از کلیک بر روی Create image sprite باید یک نام برای آن تعیین کنید و سپس بر روی کلید Save کلیک کنید. با اینکار یک فایل از نوع XML با پسوند sprite برای شما ساخته خواهد شد:</div> <div> <div align="left" dir="ltr">
<pre language="XML" name="code">&lt;?xml version="1.0" encoding="utf-8"?&gt;&#10;&lt;sprite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://vswebessentials.com/schemas/v1/sprite.xsd"&gt;&#10;  &lt;settings&gt;&#10;    &lt;!--Determines if the sprite image should be automatically optimized after creation/update.--&gt;&#10;    &lt;optimize&gt;true&lt;/optimize&gt;&#10;    &lt;!--Determines the orientation of images to form this sprite. The value must be vertical or horizontal.--&gt;&#10;    &lt;orientation&gt;vertical&lt;/orientation&gt;&#10;    &lt;!--File extension of sprite image.--&gt;&#10;    &lt;outputType&gt;png&lt;/outputType&gt;&#10;    &lt;!--Determin whether to generate/re-generate this sprite on building the solution.--&gt;&#10;    &lt;runOnBuild&gt;false&lt;/runOnBuild&gt;&#10;    &lt;!--Use full path to generate unique class or mixin name in CSS, LESS and SASS files. Consider disabling this if you want class names to be filename only.--&gt;&#10;    &lt;fullPathForIdentifierName&gt;true&lt;/fullPathForIdentifierName&gt;&#10;    &lt;!--Use absolute path in the generated CSS-like files. By default, the URLs are relative to sprite image file (and the location of CSS, LESS and SCSS).--&gt;&#10;    &lt;useAbsoluteUrl&gt;false&lt;/useAbsoluteUrl&gt;&#10;    &lt;!--Specifies a custom subfolder to save CSS files to. By default, compiled output will be placed in the same folder and nested under the original file.--&gt;&#10;    &lt;outputDirectoryForCss /&gt;&#10;    &lt;!--Specifies a custom subfolder to save LESS files to. By default, compiled output will be placed in the same folder and nested under the original file.--&gt;&#10;    &lt;outputDirectoryForLess /&gt;&#10;    &lt;!--Specifies a custom subfolder to save SCSS files to. By default, compiled output will be placed in the same folder and nested under the original file.--&gt;&#10;    &lt;outputDirectoryForScss /&gt;&#10;  &lt;/settings&gt;&#10;  &lt;!--The order of the &lt;file&gt; elements determines the order of the images in the sprite.--&gt;&#10;  &lt;files&gt;&#10;    &lt;file&gt;/Content/Images/01.png&lt;/file&gt;&#10;    &lt;file&gt;/Content/Images/02.png&lt;/file&gt;&#10;    &lt;file&gt;/Content/Images/03.png&lt;/file&gt;&#10;    &lt;file&gt;/Content/Images/04.png&lt;/file&gt;&#10;  &lt;/files&gt;&#10;&lt;/sprite&gt;</pre>
 </div>
یکی از زیر مجموعه‌های این فایل، تصویر نهایی می‌باشد، همچنین فایل‌های css, less, map و scss آن نیز تولید می‌شود:</div> <div> <p> <img src="/img/dntips/d343030c673d85c6c2cb.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div>به عنوان مثال فایل CSS تصویر فوق به صورت زیر می‌باشد:</div> <div> <div align="left" dir="ltr">
<pre language="CSS" name="code">/*&#10;This is an example of how to use the image sprite in your own CSS files&#10;*/&#10;.Content-Images-01 {&#10;/* You may have to set 'display: block' */&#10;width: 32px;&#10;height: 32px;&#10;background: url('icons.png') 0 0;&#10;}&#10;.Content-Images-02 {&#10;/* You may have to set 'display: block' */&#10;width: 32px;&#10;height: 32px;&#10;background: url('icons.png') 0 -32px;&#10;}&#10;.Content-Images-03 {&#10;/* You may have to set 'display: block' */&#10;width: 32px;&#10;height: 32px;&#10;background: url('icons.png') 0 -64px;&#10;}&#10;.Content-Images-04 {&#10;/* You may have to set 'display: block' */&#10;width: 32px;&#10;height: 32px;&#10;background: url('icons.png') 0 -96px;&#10;}</pre>
 </div>
هر کدام از کلاس‌های فوق به یک تصویر در فایل مربوطه توسط image position اشاره می‌کند. شما می‌توانید با انتساب هر کدام از کلاس‌های فوق به یک المنت از آن تصویر استفاده نمائید:</div> <div> <div align="left" dir="ltr">
<pre language="XML" name="code">&lt;div class="Content-Images-01"&gt;&lt;/div&gt;&#10;&lt;div class="Content-Images-02"&gt;&lt;/div&gt;&#10;&lt;div class="Content-Images-03"&gt;&lt;/div&gt;&#10;&lt;div class="Content-Images-04"&gt;&lt;/div&gt;</pre>
 </div> <br/> </div> <div> <b>استفاده از تصاویر Data URIs</b> </div> <div>یکی دیگر از روش‌های کاهش درخواست‌های HTTP در یک سایت استفاده از <a href="http://www.nczonline.net/blog/2009/10/27/data-uris-explained/">Data URIs</a>  می باشد، توسط این روش می‌توانید فایل هایتان را درون HTML و یا CSS قرار دهید یا به اصطلاح embed کنید. به طور مثال جهت استفاده از یک تصویر می‌توانید به راحتی با آدرس دهی تصویر درون تگ img، تصویر را درون صفحه نمایش دهید:<br/> </div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;img src="https://www.dntips.ir/images/logo.png" /&gt;</pre>
 </div> <br/> <div align="left" dir="ltr"> </div>
همین کار را می‌توانیم توسط Data URIs انجام دهیم:</div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" /&gt;</pre>
 </div>
در کد فوق تصویر موردنظر را درون HTML به صورت embed شده قرار داده ایم، در این حالت دیگری نیازی به رفت و برگشت به سرور جهت نمایش تصویر نیست.</div> <div> <b>سینتکس Data URIs</b> </div> <div>به طور مثال تگ زیر را در نظر داشته باشید:</div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;img src="data:image/png;base64,iVBOR..." /&gt;</pre>
 </div>
مقدار ویژگی src شامل موارد زیر است:</div> <div>data: نام schema</div> <div>image/png: نوع محتوا(content type)</div> <div>base64: نوع encoding استفاده شده برای encode کردن اطلاعات</div> <div>iVBOR...: اطلاعات encode شده.</div> <div>توسط افزونه Web Essentials به راحتی می‌توانید تصویر موردنظرتان را به صورت Data URI تهیه کنید:</div> <div> <p> <img src="/img/dntips/66e6077c9453b3bd565a.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div></div>
