Image Optimizer Powered by Uploadcare plugin

This plugin is only available for paid TinyMCE subscriptions.
This feature is only available for TinyMCE 7.6.0 and later.

Overview

The Image Optimizer plugin offers a range of powerful features for image hosting, serving, and editing. These include responsive image delivery, automatic image format selection, automatic compression, and non-destructive image transformations and adjustments, all powered by Uploadcare.

Key benefits

  • Improve page loading speed and save on bandwidth by serving images in the optimal size, format, and compression based on the visitor’s browser and device.

  • Ditch the image editor and adjust images right inside TinyMCE with non-destructive transformations and adjustments. Change your mind any time!

  • Stay safe and compliant with secure uploads, built in malware protection, and unsafe content detection

  • Enterprise-ready scalable cloud storage provided by Uploadcare, delivered through its lightning-fast global CDN, and compliant with SOC2 and GDPR standards.

Interactive example

  • TinyMCE

  • HTML

  • JS

  • Edit on CodePen

<textarea id="uploadcare">
  <h1>Discover Your Dream Home on Mallorca: Where Paradise Meets Investment</h1>
  <p>
    <span style="color: #4e5c73;">
      Mallorca, the jewel of the Mediterranean, is not just a place of beauty&mdash;it&rsquo;s a smart investment. With property values consistently on the rise, now is the perfect time to secure your piece of this sun-soaked paradise.&nbsp;
    </span>
  </p>
  <figure class="image">
    <img style="width: min(2048px, 100%); aspect-ratio: 2048 / 718;"
      src="https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/preview/"
      sizes="(min-width: 2048px) 2048px, 100vw"
      srcset="https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/100x/ 100w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/200x/ 200w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/300x/ 300w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/500x/ 500w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/750x/ 750w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/1000x/ 1000w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/1250x/ 1250w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/1500x/ 1500w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/resize/2000x/ 2000w,
              https://ucarecdn.com/b51db038-86df-4a83-bd9d-6942151306d0/-/preview/ 2048w">
    <figcaption>Michael Heuser on <a href="https://unsplash.com/@gum_meee">Unsplash</a></figcaption>
  </figure>
  <p>
    Let us show you why Mallorca should be your next home&mdash;and introduce you to an exquisite villa that could soon be yours.
  </p>
  <blockquote>
    <em>"The Mallorca real estate market has grown by an impressive 8% annually over the past five years,"</em> &mdash; Elena Alvarez, Market Analyst at Mediterranean Realty Insights.
  </blockquote>
  <p>
    According to recent market data, Mallorca&rsquo;s property values have experienced steady growth, with an average increase of 8% annually over the past five years. This consistent appreciation, coupled with a thriving rental market, makes it an ideal destination for investors seeking both luxury and financial returns.&nbsp;
  </p>
  <h2>Explore Our Featured Villa: The Epitome of Luxury&nbsp;</h2>
  <p>
    Located in one of Mallorca&rsquo;s most exclusive areas, this exquisite villa offers breathtaking views and modern design. Every detail has been meticulously crafted to provide the ultimate in comfort and elegance.
  </p>
  <figure class="image">
    <img style="width: min(2048px, 100%); aspect-ratio: 2048 / 1148;"
      src="https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/preview/"
      sizes="(min-width: 2048px) 2048px, 100vw"
      srcset="https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/100x/ 100w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/200x/ 200w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/300x/ 300w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/500x/ 500w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/750x/ 750w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/1000x/ 1000w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/1250x/ 1250w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/1500x/ 1500w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/resize/2000x/ 2000w,
              https://ucarecdn.com/ae5a4201-4b82-4238-94e8-78f4cccbffe8/-/preview/ 2048w">
    <figcaption>Designed by <a href="https://www.freepik.com/">Freepik</a></figcaption>
  </figure>
  <ul>
    <li><strong>5 luxurious bedrooms</strong> with private en-suite bathrooms</li>
    <li><strong>Infinity pool</strong> with panoramic Mediterranean views</li>
    <li><strong>Spacious terrace</strong> for outdoor dining and entertainment</li>
    <li><strong>Private garden</strong> with lush landscaping</li>
    <li><strong>Cutting-edge smart home system&nbsp;</strong></li>
  </ul>
  <figure class="image">
    <img style="width: min(2000px, 100%); aspect-ratio: 2000 / 1121;"
      src="https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/preview/"
      sizes="(min-width: 2000px) 2000px, 100vw"
      srcset="https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/100x/ 100w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/200x/ 200w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/300x/ 300w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/500x/ 500w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/750x/ 750w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/1000x/ 1000w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/1250x/ 1250w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/resize/1500x/ 1500w,
              https://ucarecdn.com/b384b67a-3c73-4629-be5f-07d6a2f49e01/-/preview/ 2000w">
    <figcaption>Designed by <a href="https://www.freepik.com/">Freepik</a></figcaption>
  </figure>
  <p>
    Step inside, and you&rsquo;ll find bright, open living spaces that blend seamlessly with the outdoors, creating a harmonious living environment that&rsquo;s both relaxing and inspiring.
  </p>
  <p>
    Owning a villa in Mallorca means more than just having a home&mdash;it means living a life of luxury and adventure. From exploring charming villages to dining at world-class restaurants and sailing the turquoise waters, every day is a new experience.
  </p>
  <h2>Make This Dream a Reality</h2>
  <p>
    Don&rsquo;t miss the opportunity to own a piece of paradise. <a href="https://www.tiny.cloud/contact/">Contact us today</a> to schedule a private tour of this exceptional villa and explore other exclusive properties on the island.
  </p>
</textarea>
tinymce.init({
  selector: "textarea",
  plugins: [ "uploadcare", "code", "link", "preview", "lists" ],
  uploadcare_public_key: 'cfef242412638bfc4193',	
  toolbar: "undo redo | styles | bold italic underline | forecolor | bullist numlist| link uploadcare | code preview",
  height: 700,	
  content_style: `
    body { max-width: 920px; margin: 1.5rem auto; padding: 0 2vw; }
    h1 { font-size: 1.5em; }
        h2 { font-size: 1.17em; }
    h1, h2, h3, h4, h5, h6 { font-weight: 500; margin: 0 0 0.75rem; }
    p + h1, p + h2, p + h3, p + h4, p + h5, p + h6 { margin-top: 2rem; }
    p { line-height: 1.6; margin: 0; } 
    p + p { margin-top: 1rem; }
    a { color: #2b70e3; }
    blockquote { color: #4e5c73; font-weight: 200; font-size: 1.3rem; margin: 1rem 2rem; padding: 0 0 0 1rem; border-left: 2px solid #2b70e3 !important; }
    figcaption {font-size: 0.875em;}
  `
});

Basic setup

To add the Image Optimizer Powered by Uploadcare plugin to the editor, add uploadcare to the plugins option in the editor configuration.

For example:

tinymce.init({
  selector: 'textarea',
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  // uploadcare_signed_upload_auth_provider: (_publicKey) => Promise.resolve({
  //   signature: 'sig',
  //   expire: 123
  // }), // Recommended option for secure uploads
});

The Image Optimizer Powered by Uploadcare plugin overrides the Quickbar quickimage toolbar item. To ensure a better user experience and to avoid having two image buttons configure quickbars_insert_toolbar to omit the quickimage toolbar item.

Image Operations

Below is an overview of the features of the Image Optimizer Powered by Uploadcare plugin includes for image optimization:

Feature Operation Icon Description

Align

align-left.svg

Provides alignment options for the image or element.

Align Left

align-left.svg

Aligns the image to the left.

Align Centre

align-center.svg

Centers the image.

Align Right

align-right.svg

Aligns the image to the right.

Transform

transform-image.svg

Allows users to apply transformations to the image:

Rotate Left

rotate-left.svg

Rotates the image counterclockwise (left).

Rotate Right

rotate-right.svg

Rotates the image clockwise (right).

Flip Vertically

flip-vertically.svg

Flips the image vertically.

Flip Horizontally

flip-horizontally.svg

Flips the image horizontally.

Resize

resize.svg

Changes the size of the image.

Alt Text

alt-text.svg

Adds alternative text to describe the image for accessibility purposes.

Decorative Image

image-decorative.svg

Marks the image as decorative, indicating it doesn’t require alternative text for accessibility.

This icon will only appear when the a11y_advanced_options configuration option is enabled.

Caption

caption.svg

Adds a caption below the image for additional context.

Adjust

adjustments.svg

Provides tools for adjusting image properties:

Brightness

brightness.svg

Adjusts the image brightness.

Contrast

contrast.svg

Adjusts the image contrast.

Exposure

exposure.svg

Adjusts the image exposure.

Gamma

gamma.svg

Adjusts the image gamma.

Vibrance

vibrance.svg

Adjusts the image vibrance.

Saturation

saturation.svg

Adjusts the image saturation.

Warmth

warmth.svg

Adjusts the image warmth.

Grayscale

grayscale.svg

Converts the image to grayscale.

Invert Colors

invert.svg

Inverts the image colors.

Sharpen

sharpen.svg

Sharpens the image.

Blur

blur.svg

Blurs the image.

Revert

revert.svg

Restores the image to its original state by undoing all edits.

Options

The following configuration options affect the behavior of the Image Optimizer Powered by Uploadcare plugin.

uploadcare_public_key

Defines the public API key required to authenticate and interact with the Uploadcare API. This key identifies your account and ensures that uploads and operations are associated with your project. Without setting this key, the Uploadcare integration will not function.

This option is mandatory for using Uploadcare.

Type: String

Example: Setting uploadcare_public_key

tinymce.init({
  selector: 'textarea',
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
});

uploadcare_signed_upload_auth_provider

Specifies a function used to generate secure signatures for authenticated requests to Uploadcare. This function is required when enabling Uploadcare’s signed uploads feature, which ensures that only authorized users can upload files using your uploadcare_public_key. The function should return a Promise that resolves with an object containing the signature and expiration timestamp.

Use this option to enforce secure uploads, preventing unauthorized users from uploading files via your application.

Type: Function

Example: Setting uploadcare_signed_upload_auth_provider

tinymce.init({
  selector: 'textarea',
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  uploadcare_signed_upload_auth_provider: (_publicKey) => Promise.resolve({
    signature: 'sig',
    expire: 123
  }),
});

Tiny recommends configuring the uploadcare_signed_upload_auth_provider option to secure uploads and prevent misuse of your Uploadcare uploadcare_public_key. This option is essential for applications requiring:

  • Prevention of unauthorized file uploads via your uploadcare_public_key.

  • Enforcement of secure upload practices for application integrity.

This option only secures unauthorized access to upload files to the uploadcare storage by verifying signatures during uploads.

For most integrations, enabling signed uploads by configuring this option ensures that only authorized uploads occur, reducing the risk of abuse and maintaining secure usage of your uploadcare_public_key.

uploadcare_cdn_base_url

Specifies the domain used for the Uploadcare service. This domain determines where your files are uploaded and accessed. By default, the plugin uses the Uploadcare CDN ucarecdn.com to host and deliver your files. If you use a custom domain, update this option to match your configuration.

Type: String

Default: https://ucarecdn.com/

Example: Customizing uploadcare_cdn_base_url

tinymce.init({
  selector: "textarea",
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  uploadcare_cdn_base_url: 'https://cdn.mydomain.com',
});

uploadcare_srcset_steps

Specifies an array of numeric values representing the widths used to generate the srcset attribute for responsive images. This enables browsers to select the most suitable resolution based on the device’s display and network conditions.

Customize this array to include only the widths required for your application. Reducing the number of resolutions can improve processing speed, while adding specific sizes can accommodate unique layout needs.

Type: Array

Default: [100, 200, 300, 500, 750, 1000, 1250, 1500, 2000, 2500, 3000]

Example: Generated srcset Attribute with Custom Widths

When an image is uploaded, its original width is used to create a srcset attribute with downscaled images for the defined widths. For instance, if the image width is 780 pixels and uploadcare_srcset_steps is set to [100, 200, 300, 500, 750], the resulting srcset will look like this:

Example: Responsive 780px Image with Custom Widths in srcset
<img
  style="width: min(780px, 100%); aspect-ratio: 780 / 780;"
  src="https://ucarecdn.com/{image-uid}/-/preview/"
  sizes="(min-width: 780px) 780px, 100vw"
  srcset="
      https://ucarecdn.com/{image-uid}/-/resize/100x/ 100w,
      https://ucarecdn.com/{image-uid}/-/resize/200x/ 200w,
      https://ucarecdn.com/{image-uid}/-/resize/300x/ 300w,
      https://ucarecdn.com/{image-uid}/-/resize/500x/ 500w,
      https://ucarecdn.com/{image-uid}/-/resize/750x/ 750w,
      https://ucarecdn.com/{image-uid}/-/preview/ 780w
  ">

This ensures the browser selects the optimal image size based on the viewport and device characteristics, enhancing performance and user experience. On devices with narrower viewports, smaller images (e.g., 100w or 200w) will be prioritized, reducing bandwidth usage.

Example: Customizing uploadcare_srcset_steps

To customize the array, update the configuration as shown below:

tinymce.init({
  selector: 'textarea',
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  uploadcare_srcset_steps: [100, 200, 300, 500, 750],
});

uploadcare_store_type

Specifies the storage type for uploaded files. Use this option to control whether files are stored temporarily or permanently, or allow Uploadcare to decide automatically based on your account settings.

  • auto: Uploadcare decides the storage type.

  • temporary: Files are stored temporarily and will expire after a certain period.

  • permanent: Files are stored permanently in your Uploadcare account.

Select the appropriate value based on your application’s requirements, such as whether files should persist for long-term use or be available for a limited time.

Type: String

Default: permanent

Possible values: auto, temporary, permanent

Example: Using uploadcare_store_type

tinymce.init({
  selector: 'textarea',
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  uploadcare_store_type: 'permanent',
});

a11y_advanced_options

This option affects the functionality of:

Setting a11y_advanced_options to true:

  • Adds the Image is decorative option to the Insert/Edit Image dialog, allowing users to specify that an image is decorative and does not require alternative text for accessibility purposes.

  • Adds the Decorative image button to Image Optimizer’s Alt text context toolbar, allowing users to specify that an image is decorative and does not require alternative text for accessibility purposes.

  • Adds the Image is decorative option to the Accessibility Checker error dialog for images without alternative text or the role="presentation" attribute.

If a11ychecker_allow_decorative_images is not explicitly set, the value defined in a11y_advanced_options will be used.

Type: Boolean

Default value: false

Possible values: true, false

Example: using a11y_advanced_options

tinymce.init({
  selector: 'textarea',  // change this value according to your HTML
  plugins: 'uploadcare',
  toolbar: 'uploadcare',
  uploadcare_public_key: '<your-public-key>',
  a11y_advanced_options: true,
});

Toolbar buttons

The Image Optimizer Powered by Uploadcare plugin provides the following toolbar buttons:

Identifier Description

uploadcare

Inserts an image placeholder element. This placeholder supports image uploads via drag-and-drop, file selection, or by providing a URL.

These toolbar buttons can be added to the editor using:

The Image Optimizer Powered by Uploadcare plugin provides the following menu items:

Identifier Description

uploadcare

Inserts an image placeholder element. This placeholder supports image uploads via drag-and-drop, file selection, or by providing a URL.

These menu items can be added to the editor using: