diff --git a/images/convert/convert.go b/images/convert/convert.go
index b704055dd7399eb4629d1804cd51574befff49c6..0903f19f4e5c3808f750e9c4e3bc4b7b0f81c409 100644
--- a/images/convert/convert.go
+++ b/images/convert/convert.go
@@ -3,6 +3,7 @@ package convert
 import (
 	"image"
 	"io"
+	"mime"
 	"os"
 	"strings"
 
@@ -69,5 +70,23 @@ func FormatFromExtension(ext string) (Format, error) {
 	if f, ok := formatExtensions[ext]; ok {
 		return f, nil
 	}
-	return "", errors.Errorf("unsupported format")
+	return "", errors.Errorf("unsupported format: %s", ext)
+}
+
+func FormatFromMIMEType(typ string) (Format, error) {
+	extensions, err := mime.ExtensionsByType(typ)
+	if err != nil {
+		return "", errors.Wrap(err, "get extensions by mime type")
+	}
+	if len(extensions) == 0 {
+		return "", errors.Errorf("unknown mime type: %s", typ)
+	}
+	for _, extension := range extensions {
+		var format Format
+		format, err = FormatFromExtension(extension)
+		if err == nil {
+			return format, nil
+		}
+	}
+	return "", err
 }
diff --git a/images/convert/convert_test.go b/images/convert/convert_test.go
index b7a759eac8dba586d985806bb587975e07a93403..e48930e7de8000e8a43ecc7277c808340a1fb553 100644
--- a/images/convert/convert_test.go
+++ b/images/convert/convert_test.go
@@ -57,6 +57,55 @@ func TestFormatFromExtension(t *testing.T) {
 	}
 }
 
+func TestFormatFromMIMEType(t *testing.T) {
+	var tests = []struct {
+		name    string
+		input   string
+		output  Format
+		wantErr bool
+	}{
+		{
+			name:    "correct jpeg",
+			input:   "image/jpeg",
+			output:  JPEG,
+			wantErr: false,
+		},
+		{
+			name:    "correct png",
+			input:   "image/png",
+			output:  PNG,
+			wantErr: false,
+		},
+		{
+			name:    "unsupported mime type",
+			input:   "application/json",
+			wantErr: true,
+		},
+		{
+			name:    "unknown mime type",
+			input:   "application/perxis",
+			wantErr: true,
+		},
+		{
+			name:    "no mime type",
+			input:   "",
+			wantErr: true,
+		},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			format, err := FormatFromMIMEType(tc.input)
+			if tc.wantErr {
+				require.Error(t, err)
+			} else {
+				require.NoError(t, err)
+				require.Equal(t, tc.output, format)
+			}
+		})
+	}
+}
+
 func TestEncode(t *testing.T) {
 	var tests = []struct {
 		name    string