+use std::io::Cursor;
+use std::fmt::Display;
+use std::fmt;
+use actix_web::{get, web, App, HttpServer, HttpResponse, Responder, ResponseError, Result};
+use actix_web::body::BoxBody;
+use actix_web::http::StatusCode;
+use image::{ImageBuffer, ColorType, RgbImage, write_buffer_with_format};
+use image::ImageOutputFormat::Png;
+
+#[derive(Debug)]
+struct ImageError(image::ImageError);
+
+impl Display for ImageError {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", &self.0)
+ }
+}
+
+impl ResponseError for ImageError {
+ fn status_code(&self) -> StatusCode {
+ StatusCode::INTERNAL_SERVER_ERROR
+ }
+
+ fn error_response(&self) -> HttpResponse<BoxBody> {
+ HttpResponse::InternalServerError().finish()
+ }
+}
+
+fn to_imageresult<T> (result: Result<T, image::ImageError>) -> Result<T, ImageError> {
+ match result {
+ Ok(v) => Ok(v),
+ Err(e) => Err(ImageError(e))
+ }
+}