*/
#include <stdbool.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <unistd.h>
+
#include <magick/api.h>
+
#include "mm_util_private.h"
#include "mm_util_magick.h"
SetErrorHandler(__mm_util_magick_error_handler);
SetFatalErrorHandler(__mm_util_magick_error_handler);
SetWarningHandler(__mm_util_magick_error_handler);
-
- return;
}
-static void __mm_util_finalize(Image *image_1, Image *image_2, ImageInfo *imageInfo, ExceptionInfo *exception)
+static void __mm_util_finalize(Image *image_1, Image *image_2, ExceptionInfo *exception)
{
DestroyImageList(image_1);
DestroyImageList(image_2);
- if (imageInfo != NULL)
- DestroyImageInfo(imageInfo);
-
if (exception != NULL)
DestroyExceptionInfo(exception);
DestroyMagick();
-
- return;
}
static int __mm_util_get_map(mm_util_color_format_e format, char **map)
return _processed_image;
}
-static Image * __mm_util_read_image_from_file(const char *path, ImageInfo **image_info)
+static Image * __mm_util_read_image_from_file(const char *path)
{
ImageInfo *_image_info = NULL;
Image *_image = NULL;
mm_util_fenter();
mm_util_retvm_if(!MMUTIL_STRING_VALID(path), NULL, "invalid path");
- mm_util_retvm_if(image_info == NULL, NULL, "invalid image_info");
GetExceptionInfo(&exception);
_image_info = CloneImageInfo(0);
+ mm_util_retvm_if(!_image_info, NULL, "Error: CloneImageInfo failed.");
g_strlcpy(_image_info->filename, path, sizeof(_image_info->filename));
AddDefinition(_image_info, "jpeg", "dct-method", "FASTEST", &exception);
mm_util_error("Error: Reading Image failed.");
if (exception.severity != UndefinedException)
CatchException(&exception);
-
- DestroyImageInfo(_image_info);
- } else {
- *image_info = _image_info;
}
+ DestroyImageInfo(_image_info);
DestroyExceptionInfo(&exception);
mm_util_fleave();
return _image;
}
-static int __mm_util_write_image_to_file(ImageInfo *image_info, Image *image, const char *out_path)
+static int __mm_util_write_image_to_file(Image *image, const char *out_path)
{
int ret = MM_UTIL_ERROR_NONE;
+ ImageInfo *_image_info = NULL;
ExceptionInfo exception;
mm_util_fenter();
- mm_util_retvm_if(image_info == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid image_info");
mm_util_retvm_if(image == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid image");
mm_util_retvm_if(!MMUTIL_STRING_VALID(out_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid out_path");
GetExceptionInfo(&exception);
+ _image_info = CloneImageInfo(0);
+ mm_util_retvm_if(_image_info == NULL, MM_UTIL_ERROR_INVALID_OPERATION, "Error: CloneImageInfo failed.");
+
SAFE_STRLCPY(image->filename, out_path, sizeof(image->filename));
image->filename[MaxTextExtent-1] = '\0';
- AddDefinition(image_info, "jpeg", "dct-method", "FASTEST", &exception);
- AddDefinition(image_info, "jpeg", "optimize-coding", "FALSE", &exception);
- //DeleteImageProfile(image, "EXIF");
+ AddDefinition(_image_info, "jpeg", "dct-method", "FASTEST", &exception);
+ AddDefinition(_image_info, "jpeg", "optimize-coding", "FALSE", &exception);
+ DeleteImageProfile(image, "EXIF");
DeleteImageProfile(image, "8BIM");
DeleteImageProfile(image, "ICM");
DeleteImageProfile(image, "IPTC");
DeleteImageProfile(image, "XMP");
- if (WriteImage (image_info, image) == MagickFalse) {
+ if (WriteImage (_image_info, image) == MagickFalse) {
mm_util_error("Error: Writing Image failed.");
if (exception.severity != UndefinedException)
CatchException(&exception);
ret = MM_UTIL_ERROR_INVALID_OPERATION;
}
+ DestroyImageInfo(_image_info);
DestroyExceptionInfo(&exception);
mm_util_fleave();
ERROR:
- __mm_util_finalize(_image, _processed_image, NULL, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
char *map = NULL;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
mm_util_retvm_if(src_handle == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid handle");
goto ERROR;
}
- _image_info = CloneImageInfo(0);
- ret = __mm_util_write_image_to_file(_image_info, _processed_image, dst_path);
+ ret = __mm_util_write_image_to_file(_processed_image, dst_path);
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
char *map = NULL;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
size_t pixels_size = 0;
void *pixels = 0;
__mm_util_init(&exception);
- _image = __mm_util_read_image_from_file(src_path, &_image_info);
+ _image = __mm_util_read_image_from_file(src_path);
if (_image == NULL) {
mm_util_error("Error: __mm_util_read_image_from_file failed.");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
int ret = MM_UTIL_ERROR_NONE;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
mm_util_retvm_if(!MMUTIL_STRING_VALID(src_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid src_path");
__mm_util_init(&exception);
- _image = __mm_util_read_image_from_file(src_path, &_image_info);
+ _image = __mm_util_read_image_from_file(src_path);
if (_image == NULL) {
mm_util_error("Error: __mm_util_read_image_from_file failed.");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
goto ERROR;
}
- ret = __mm_util_write_image_to_file(_image_info, _processed_image, dst_path);
+ ret = __mm_util_write_image_to_file(_processed_image, dst_path);
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
mm_util_fleave();
ERROR:
- __mm_util_finalize(_image, _processed_image, NULL, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
char *map = NULL;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
mm_util_retvm_if(src_handle == NULL, MM_UTIL_ERROR_INVALID_PARAMETER, "invalid handle");
goto ERROR;
}
- _image_info = CloneImageInfo(0);
- ret = __mm_util_write_image_to_file(_image_info, _processed_image, dst_path);
+ ret = __mm_util_write_image_to_file(_processed_image, dst_path);
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
char *map = NULL;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
size_t pixels_size = 0;
void *pixels = 0;
__mm_util_init(&exception);
- _image = __mm_util_read_image_from_file(src_path, &_image_info);
+ _image = __mm_util_read_image_from_file(src_path);
if (_image == NULL) {
mm_util_error("Error: __mm_util_read_image_from_file failed.");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
MMUTIL_SAFE_FREE(map);
int ret = MM_UTIL_ERROR_NONE;
Image *_image = NULL;
Image *_processed_image = NULL;
- ImageInfo *_image_info = NULL;
ExceptionInfo exception;
mm_util_retvm_if(!MMUTIL_STRING_VALID(src_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid src_path");
__mm_util_init(&exception);
- _image = __mm_util_read_image_from_file(src_path, &_image_info);
+ _image = __mm_util_read_image_from_file(src_path);
if (_image == NULL) {
mm_util_error("Error: __mm_util_read_image_from_file failed.");
ret = MM_UTIL_ERROR_INVALID_OPERATION;
goto ERROR;
}
- ret = __mm_util_write_image_to_file(_image_info, _processed_image, dst_path);
+ ret = __mm_util_write_image_to_file(_processed_image, dst_path);
ERROR:
- __mm_util_finalize(_image, _processed_image, _image_info, &exception);
+ __mm_util_finalize(_image, _processed_image, &exception);
mm_util_fleave();
ERROR:
- __mm_util_finalize(_image, NULL, NULL, &exception);
+ __mm_util_finalize(_image, NULL, &exception);
MMUTIL_SAFE_FREE(map);
return ret;
}
+
+int mm_util_resize_and_rotate_P_P(const char *src_path, unsigned int req_width, unsigned int req_height, const char *dst_path)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ Image *_image = NULL;
+ Image *_resized_image = NULL;
+ Image *_rotated_image = NULL;
+ ExceptionInfo exception;
+ mm_util_magick_rotate_type rotation = MM_UTIL_ROTATE_0;
+
+ mm_util_retvm_if(!MMUTIL_STRING_VALID(src_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid src_path");
+ mm_util_retvm_if((req_width == 0) || (req_height == 0), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid size W[%d] H[%d]", req_width, req_height);
+ mm_util_retvm_if(!MMUTIL_STRING_VALID(dst_path), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid dst_path");
+
+ mm_util_sec_debug("src_path [%s] req_width [%u] req_height [%u] dst_path [%s]", src_path, req_width, req_height, dst_path);
+
+ __mm_util_init(&exception);
+
+ _image = __mm_util_read_image_from_file(src_path);
+ if (_image == NULL) {
+ mm_util_error("Error: __mm_util_read_image_from_file failed.");
+ ret = MM_UTIL_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ if ((_image->columns < req_width) || (_image->rows < req_height)) {
+ mm_util_error("Wrong Size. image [%lu * %lu], request [%u * %u]", _image->columns, _image->rows, req_width, req_height);
+ ret = MM_UTIL_ERROR_INVALID_PARAMETER;
+ goto ERROR;
+ }
+
+ _resized_image = __mm_util_resize_image(_image, req_width, req_height);
+ if (_resized_image == NULL) {
+ mm_util_error("Error: __mm_util_resize_image failed.");
+ ret = MM_UTIL_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ switch(_resized_image->orientation) {
+ case TopRightOrientation:
+ case RightTopOrientation:
+ rotation = MM_UTIL_ROTATE_90;
+ break;
+ case BottomRightOrientation:
+ case RightBottomOrientation:
+ rotation = MM_UTIL_ROTATE_180;
+ break;
+ case BottomLeftOrientation:
+ case LeftBottomOrientation:
+ rotation = MM_UTIL_ROTATE_270;
+ break;
+ case TopLeftOrientation:
+ case LeftTopOrientation:
+ break;
+ default:
+ mm_util_warn("Not supported orientation %d. so apply MM_UTIL_ROTATE_0", _resized_image->orientation);
+ break;
+ }
+
+ if (rotation != MM_UTIL_ROTATE_0) {
+ _rotated_image = __mm_util_rotate_image(_resized_image, rotation);
+ if (_rotated_image == NULL) {
+ mm_util_error("Error: __mm_util_resize_image failed.");
+ ret = MM_UTIL_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+ }
+
+ ret = __mm_util_write_image_to_file(((_rotated_image) ? _rotated_image : _resized_image), dst_path);
+
+ERROR:
+
+ DestroyImageList(_image);
+ __mm_util_finalize(_resized_image, _rotated_image, &exception);
+
+ mm_util_fleave();
+
+ return ret;
+}