{"id":237904,"date":"2025-11-05T18:10:19","date_gmt":"2025-11-05T18:10:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/liteimage\/"},"modified":"2026-04-10T06:59:39","modified_gmt":"2026-04-10T06:59:39","slug":"liteimage","status":"publish","type":"plugin","link":"https:\/\/af.wordpress.org\/plugins\/liteimage\/","author":20815409,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"3.3.3","stable_tag":"3.3.3","tested":"6.8.5","requires":"5.8","requires_php":"8.0","requires_plugins":null,"header_name":"LiteImage","header_author":"Oleksandr Gryshko","header_description":"Optimizes images with dynamic thumbnails, WebP support, and accessibility.","assets_banners_color":"","last_updated":"2026-04-10 06:59:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/Sanetchek","rating":0,"author_block_rating":0,"active_installs":0,"downloads":378,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.2.1":{"tag":"3.2.1","author":"algryshko","date":"2025-11-05 18:26:23"},"3.3.0":{"tag":"3.3.0","author":"algryshko","date":"2025-11-10 11:58:15"},"3.3.1":{"tag":"3.3.1","author":"algryshko","date":"2025-12-17 08:48:47"},"3.3.2":{"tag":"3.3.2","author":"algryshko","date":"2026-02-23 10:12:34"},"3.3.3":{"tag":"3.3.3","author":"algryshko","date":"2026-04-10 06:59:39"}},"upgrade_notice":{"3.3.3":"<p>New quality controls in Tools \u2192 LiteImage Settings. Existing thumbnails are unchanged until you regenerate or clear them.<\/p>","3.2.0":"<p>Complete rewrite with modern architecture. All existing uses of <code>liteimage()<\/code> continue to work. Requires PHP 8.1+ and Intervention Image 3.x.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3390670,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3390670,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"liteimage\/image":{"apiVersion":2,"name":"liteimage\/image","title":"LiteImage Image","category":"media","icon":"camera","description":"Responsive image block powered by LiteImage renderer with full breakpoint control.","textdomain":"liteimage","supports":{"html":false,"align":["wide","full"]},"keywords":["image","responsive","liteimage"],"attributes":{"desktopImageId":{"type":"number","default":0},"mobileImageId":{"type":"number","default":0},"thumb":{"type":"object","default":{"width":0,"height":0}},"htmlAttributes":{"type":"array","default":[]},"breakpoints":{"type":"array","default":[]},"breakpointMode":{"type":"string","default":"min","enum":["min","max"]}},"editorScript":"liteimage-block-editor"}},"tagged_versions":["3.2.1","3.3.0","3.3.1","3.3.2","3.3.3"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3390655,"resolution":"1","location":"assets","locale":""},"Screenshot-2.png":{"filename":"Screenshot-2.png","revision":3392920,"resolution":"2","location":"assets","locale":""},"Screenshot-3.png":{"filename":"Screenshot-3.png","revision":3390655,"resolution":"3","location":"assets","locale":""},"Screenshot-4.png":{"filename":"Screenshot-4.png","revision":3390655,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"LiteImage Settings page","2":"Thumbnail cleanup options","3":"Media Library showing dynamic sizes"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[163,187,606,2956,15376],"plugin_category":[50,52],"plugin_contributors":[250332],"plugin_business_model":[],"class_list":["post-237904","plugin","type-plugin","status-publish","hentry","plugin_tags-images","plugin_tags-optimization","plugin_tags-responsive","plugin_tags-thumbnails","plugin_tags-webp","plugin_category-media","plugin_category-performance","plugin_contributors-algryshko","plugin_committers-algryshko"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/liteimage\/assets\/icon-128x128.jpg?rev=3390670","icon_2x":"https:\/\/ps.w.org\/liteimage\/assets\/icon-256x256.jpg?rev=3390670","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/liteimage\/assets\/Screenshot-1.png?rev=3390655","caption":"LiteImage Settings page"},{"src":"https:\/\/ps.w.org\/liteimage\/assets\/Screenshot-2.png?rev=3392920","caption":"Thumbnail cleanup options"},{"src":"https:\/\/ps.w.org\/liteimage\/assets\/Screenshot-3.png?rev=3390655","caption":"Media Library showing dynamic sizes"},{"src":"https:\/\/ps.w.org\/liteimage\/assets\/Screenshot-4.png?rev=3390655","caption":""}],"raw_content":"<!--section=description-->\n<p>LiteImage is a lightweight, developer-friendly WordPress plugin that optimizes images using dynamic thumbnail generation, WebP support, and accessibility enhancements. With a fully refactored object-oriented architecture, LiteImage gives full control over responsive image rendering and disk space management.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Dynamic Thumbnails: Generate only the sizes you need on demand using the <code>liteimage()<\/code> function<\/li>\n<li>WebP Support: Convert images to WebP automatically using Intervention Image library<\/li>\n<li>Responsive Images: Serve the right image for the right device with media queries<\/li>\n<li>Mobile-Specific Images: Serve a dedicated mobile MOBILE-specific image for viewports under 768px<\/li>\n<li>Accessibility: Add alt, aria-label, and other HTML attributes<\/li>\n<li>Clean Thumbnails: Delete LiteImage or WordPress-generated thumbnails from Toolsower<\/li>\n<li>Debug Logging: Track plugin activity when logging is enabled<\/li>\n<li>OOP Architecture: Fully class-based core with backward compatibility<\/li>\n<\/ul>\n\n<h3>Arc Credits<\/h3>\n\n<p>Developed by Oleksandr Gryshko.\nPowered by Intervention Image.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>liteimage<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin in WordPress admin<\/li>\n<li>Run <code>composer install<\/code> in the plugin directory<\/li>\n<li>Go to Tools &gt; LiteImage Settings to configure<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20liteimage%20support%20webp%3F\"><h3>Does LiteImage support WebP?<\/h3><\/dt>\n<dd><p>Yes, if Intervention Image is installed and GD or Imagick supports WebP.<\/p><\/dd>\n<dt id=\"can%20i%20use%20different%20images%20for%20mobile%3F\"><h3>Can I use different images for mobile?<\/h3><\/dt>\n<dd><p>Yes. Use the third parameter in <code>liteimage()<\/code> function for mobile-specific image.<\/p><\/dd>\n<dt id=\"how%20do%20i%20clear%20thumbnails%3F\"><h3>How do I clear thumbnails?<\/h3><\/dt>\n<dd><p>Go to Tools &gt; LiteImage Settings and use the available cleanup buttons.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.3.3<\/h4>\n\n<ul>\n<li>Added: Settings for output quality (60\u2013100): WebP when WebP thumbnails are enabled; separate JPEG\/lossy and PNG compression when serving original formats.<\/li>\n<li>Added: Admin UI toggles quality fields based on the \u201cGenerate WebP\u201d option; PNG uses zlib\/Imagick compression strength (lossless pixels).<\/li>\n<li>Fixed: PNG encoding compatible with PHP 8+ (removed invalid extra argument to Intervention Image PNG encoder).<\/li>\n<li>Fixed: Smart compression reference PNG creation uses a proper image clone.<\/li>\n<\/ul>\n\n<h4>3.3.2<\/h4>\n\n<ul>\n<li>Added: Support for conversion at original size \u2014 when <code>thumb<\/code> is <code>'full'<\/code> or <code>[0, 0]<\/code>, images are converted (WebP and original format) without resizing.<\/li>\n<li>Added: In <code>liteimage_downsize()<\/code>, size <code>[0, 0]<\/code> now returns the original image dimensions.<\/li>\n<li>Added: In <code>get_thumb_size()<\/code>, support for <code>'full'<\/code> and <code>[0, 0]<\/code> with correct <code>size_name<\/code> in format <code>liteimage-{width}x{height}<\/code>.<\/li>\n<li>Fixed: Safe reading of <code>width<\/code>\/<code>height<\/code> from attachment metadata in <code>liteimage_downsize()<\/code> when keys are missing.<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li>Fixed: Thumbnail filename conflicts when multiple images share the same filename. Added attachment ID to thumbnail filenames to ensure uniqueness.<\/li>\n<li>Fixed: Format changed from <code>{filename}-{size_name}.{ext}<\/code> to <code>{filename}-{attachment_id}-{size_name}.{ext}<\/code> for all thumbnail variants (WebP, original format, and retina @2x versions).<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>Added: Gutenberg block <strong>LiteImage Image<\/strong> with full responsive controls for desktop\/mobile sources, breakpoints, and HTML attributes.<\/li>\n<li>Added: PHPUnit smoke test covering block attribute sanitization.<\/li>\n<li>Added: Automatic 2x retina variants for all generated LiteImage sizes, including Gutenberg block output.<\/li>\n<li>Changed: Refreshed plugin icon to match the new brand palette.<\/li>\n<li>Changed: Updated documentation with block usage instructions and retina guidance.<\/li>\n<\/ul>\n\n<h4>3.2.1<\/h4>\n\n<ul>\n<li>Fixed: Unescaped output in admin tab navigation (WordPress.org Plugin Check compliance)<\/li>\n<li>Fixed: Removed deprecated load_plugin_textdomain() call (WordPress auto-loads translations since 4.6)<\/li>\n<li>Fixed: Updated readme.txt headers to match plugin requirements (Tested up to: 6.8, Requires at least: 5.8)<\/li>\n<li>Fixed: Added phpcs:ignore comments for necessary direct database queries in transient cleanup<\/li>\n<li>Fixed: WordPress.org Plugin Check compliance - all errors and warnings resolved<\/li>\n<li>Improved: Code standards compliance for WordPress.org submission<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Complete OOP refactoring with PHP namespaces<\/li>\n<li>PSR-4 autoloading implementation<\/li>\n<li>Performance improvements (up to 50% faster)<\/li>\n<li>Security enhancements (rate limiting, validation)<\/li>\n<li>Moved logs to uploads directory<\/li>\n<li>Proper JavaScript enqueuing<\/li>\n<li>Comprehensive documentation<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Refactored to OOP architecture<\/li>\n<li>Improved maintainability<\/li>\n<li>Added Intervention Image support<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added buttons to clear thumbnails<\/li>\n<li>Improved cleanup logic<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added WebP support status display<\/li>\n<li>Codebase refactor<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Optimizes images with dynamic thumbnails, WebP support, and accessibility for faster, responsive WordPress sites.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/237904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=237904"}],"author":[{"embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/algryshko"}],"wp:attachment":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=237904"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=237904"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=237904"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=237904"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=237904"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=237904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}