{"record":{"id":"c974e35f90c65d1a","repo":"SixLabors/ImageSharp","slug":"no-encoder-was-found-for-extension-ext-using-image-format","errorCode":null,"errorMessage":"No encoder was found for extension '{ext}' using image format '{format.Name}'. Registered encoders include:","messagePattern":"No encoder was found for extension '(.+?)' using image format '(.+?)'\\. Registered encoders include:","errorType":"exception","errorClass":"UnknownImageFormatException","httpStatus":null,"severity":"error","filePath":"src/ImageSharp/Advanced/AdvancedImageExtensions.cs","lineNumber":53,"sourceCode":"            {\n                sb = sb.AppendFormat(CultureInfo.InvariantCulture, \" - {0} : {1}{2}\", fmt.Name, string.Join(\", \", fmt.FileExtensions), Environment.NewLine);\n            }\n\n            throw new UnknownImageFormatException(sb.ToString());\n        }\n\n        IImageEncoder? encoder = source.Configuration.ImageFormatsManager.GetEncoder(format);\n\n        if (encoder is null)\n        {\n            StringBuilder sb = new();\n            sb = sb.AppendLine(CultureInfo.InvariantCulture, $\"No encoder was found for extension '{ext}' using image format '{format.Name}'. Registered encoders include:\");\n            foreach (KeyValuePair<IImageFormat, IImageEncoder> enc in source.Configuration.ImageFormatsManager.ImageEncoders)\n            {\n                sb = sb.AppendFormat(CultureInfo.InvariantCulture, \" - {0} : {1}{2}\", enc.Key, enc.Value.GetType().Name, Environment.NewLine);\n            }\n\n            throw new UnknownImageFormatException(sb.ToString());\n        }\n\n        return encoder;\n    }\n\n    /// <summary>\n    /// Accepts a <see cref=\"IImageVisitor\"/> to implement a double-dispatch pattern in order to\n    /// apply pixel-specific operations on non-generic <see cref=\"Image\"/> instances\n    /// </summary>\n    /// <param name=\"source\">The source image.</param>\n    /// <param name=\"visitor\">The image visitor.</param>\n    public static void AcceptVisitor(this Image source, IImageVisitor visitor)\n        => source.Accept(visitor);\n\n    /// <summary>\n    /// Accepts a <see cref=\"IImageVisitor\"/> to implement a double-dispatch pattern in order to\n    /// apply pixel-specific operations on non-generic <see cref=\"Image\"/> instances\n    /// </summary>","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/SixLabors/ImageSharp/blob/59ce6af6fc29027cda277ef62d4d1694a8acce91/src/ImageSharp/Advanced/AdvancedImageExtensions.cs#L35-L71","documentation":"A format was successfully detected from the file extension, but the Configuration's ImageFormatsManager has no IImageEncoder registered for that specific IImageFormat. The format is known but cannot be encoded, so UnknownImageFormatException is thrown listing each registered format/encoder pair.","triggerScenarios":"Calling image.Save(path) where the extension maps to a detected IImageFormat (e.g. a custom format or a format registered in ImageFormats but not in ImageEncoders), and ImageFormatsManager.GetEncoder(format) returns null.","commonSituations":"Registering a custom IImageFormat via configuration.Configure(...) but forgetting to also register its encoder with ImageFormatsManager.SetEncoder(format, encoder); a configuration where a format was added without its encoder; mismatched format/encoder registration after copying configuration settings.","solutions":["Register an encoder for the format: configuration.ImageFormatsManager.SetEncoder(format, new MyFormatEncoder())","Check the error message's list to confirm which format/encoder pairs are registered","Save with an explicitly supplied encoder instead of format detection: image.Save(path, encoder)"],"exampleFix":"// before\nconfiguration.Configure(new MyFormat()); // format registered, encoder missing\nimage.Save(\"file.myext\");\n// after\nconfiguration.Configure(new MyFormat());\nconfiguration.ImageFormatsManager.SetEncoder(MyFormat.Instance, new MyFormatEncoder());\nimage.Save(\"file.myext\");","handlingStrategy":"validation","validationCode":"var format = configuration.ImageFormatsManager.FindEncoderByExtension?;\n// pre-check: every registered format must have an encoder\nforeach (var fmt in configuration.ImageFormats)\n    if (configuration.ImageFormatsManager.GetEncoder(fmt) is null)\n        throw new InvalidOperationException($\"No encoder registered for {fmt.Name}\");","typeGuard":null,"tryCatchPattern":"try { image.Save(path); }\ncatch (UnknownImageFormatException ex) { logger.LogError(ex, \"Encoder missing for detected format at {Path}\", path); }","preventionTips":["After Configure/registration, assert each format has an encoder via ImageFormatsManager.GetEncoder","Register encoder explicitly: ImageFormatsManager.SetEncoder(format, encoder)","Use explicit encoder parameters when the configuration is not fully under your control"],"tags":["image","encoder-registration","configuration","format-detection"],"backgroundTag":"missing-required-config","analyzedSha":"59ce6af6fc29027cda277ef62d4d1694a8acce91","analyzedAt":"2026-09-13T18:34:59.331Z","contentChangedAt":"2026-09-13T18:34:59.331Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}