forked from enlightenment/efl
Added support to set quality and compress level.
SVN revision: 41286
This commit is contained in:
parent
5dc0fa41ef
commit
f9b765ec1c
|
@ -64,6 +64,8 @@ struct _Ethumb_Setup
|
|||
int format : 1;
|
||||
int aspect : 1;
|
||||
int crop : 1;
|
||||
int quality : 1;
|
||||
int compress : 1;
|
||||
int directory : 1;
|
||||
int category : 1;
|
||||
int frame : 1;
|
||||
|
@ -75,6 +77,8 @@ struct _Ethumb_Setup
|
|||
int format;
|
||||
int aspect;
|
||||
float cx, cy;
|
||||
int quality;
|
||||
int compress;
|
||||
const char *directory;
|
||||
const char *category;
|
||||
const char *theme_file;
|
||||
|
@ -468,6 +472,8 @@ _ethumbd_pipe_write_setup(int fd, int type, const void *data)
|
|||
case ETHUMBD_FDO:
|
||||
case ETHUMBD_FORMAT:
|
||||
case ETHUMBD_ASPECT:
|
||||
case ETHUMBD_QUALITY:
|
||||
case ETHUMBD_COMPRESS:
|
||||
case ETHUMBD_SIZE_W:
|
||||
case ETHUMBD_SIZE_H:
|
||||
case ETHUMBD_DOCUMENT_PAGE:
|
||||
|
@ -522,6 +528,10 @@ _process_setup(struct _Ethumbd *ed)
|
|||
_ethumbd_pipe_write_setup(fd, ETHUMBD_CROP_X, &setup->cx);
|
||||
_ethumbd_pipe_write_setup(fd, ETHUMBD_CROP_Y, &setup->cy);
|
||||
}
|
||||
if (setup->flags.quality)
|
||||
_ethumbd_pipe_write_setup(fd, ETHUMBD_QUALITY, &setup->quality);
|
||||
if (setup->flags.compress)
|
||||
_ethumbd_pipe_write_setup(fd, ETHUMBD_COMPRESS, &setup->compress);
|
||||
if (setup->flags.directory)
|
||||
_ethumbd_pipe_write_setup(fd, ETHUMBD_DIRECTORY, setup->directory);
|
||||
if (setup->flags.category)
|
||||
|
@ -1182,6 +1192,49 @@ _ethumb_dbus_crop_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, str
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_quality_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
|
||||
{
|
||||
int type;
|
||||
int quality;
|
||||
|
||||
type = dbus_message_iter_get_arg_type(iter);
|
||||
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
|
||||
{
|
||||
ERR("invalid param for quality_set.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
dbus_message_iter_get_basic(iter, &quality);
|
||||
DBG("setting quality to: %d\n", quality);
|
||||
request->setup.flags.quality = 1;
|
||||
request->setup.quality = quality;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
_ethumb_dbus_compress_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
|
||||
{
|
||||
int type;
|
||||
int compress;
|
||||
|
||||
type = dbus_message_iter_get_arg_type(iter);
|
||||
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
|
||||
{
|
||||
ERR("invalid param for compress_set.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
dbus_message_iter_get_basic(iter, &compress);
|
||||
DBG("setting compress to: %d\n", compress);
|
||||
request->setup.flags.compress = 1;
|
||||
request->setup.compress = compress;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_frame_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
|
||||
{
|
||||
|
@ -1305,6 +1358,8 @@ static struct
|
|||
{ "format", _ethumb_dbus_format_set },
|
||||
{ "aspect", _ethumb_dbus_aspect_set },
|
||||
{ "crop", _ethumb_dbus_crop_set },
|
||||
{ "quality", _ethumb_dbus_quality_set },
|
||||
{ "compress", _ethumb_dbus_compress_set },
|
||||
{ "frame", _ethumb_dbus_frame_set },
|
||||
{ "directory", _ethumb_dbus_directory_set },
|
||||
{ "category", _ethumb_dbus_category_set },
|
||||
|
|
|
@ -367,6 +367,36 @@ _ec_crop_set(struct _Ethumbd_Child *ec, Ethumb *e)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_ec_quality_set(struct _Ethumbd_Child *ec, Ethumb *e)
|
||||
{
|
||||
int r;
|
||||
int value;
|
||||
|
||||
r = _ec_read_safe(ec->pipein, &value, sizeof(value));
|
||||
if (!r)
|
||||
return 0;
|
||||
ethumb_thumb_quality_set(e, value);
|
||||
DBG("quality = %d\n", value);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_ec_compress_set(struct _Ethumbd_Child *ec, Ethumb *e)
|
||||
{
|
||||
int r;
|
||||
int value;
|
||||
|
||||
r = _ec_read_safe(ec->pipein, &value, sizeof(value));
|
||||
if (!r)
|
||||
return 0;
|
||||
ethumb_thumb_compress_set(e, value);
|
||||
DBG("compress = %d\n", value);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_ec_frame_set(struct _Ethumbd_Child *ec, Ethumb *e)
|
||||
{
|
||||
|
@ -484,6 +514,12 @@ _ec_setup_process(struct _Ethumbd_Child *ec, int index, int type)
|
|||
case ETHUMBD_CROP_X:
|
||||
_ec_crop_set(ec, e);
|
||||
break;
|
||||
case ETHUMBD_QUALITY:
|
||||
_ec_quality_set(ec, e);
|
||||
break;
|
||||
case ETHUMBD_COMPRESS:
|
||||
_ec_compress_set(ec, e);
|
||||
break;
|
||||
case ETHUMBD_FRAME_FILE:
|
||||
_ec_frame_set(ec, e);
|
||||
break;
|
||||
|
|
|
@ -19,6 +19,8 @@ enum Ethubmd_Setup_Option
|
|||
ETHUMBD_ASPECT,
|
||||
ETHUMBD_CROP_X,
|
||||
ETHUMBD_CROP_Y,
|
||||
ETHUMBD_QUALITY,
|
||||
ETHUMBD_COMPRESS,
|
||||
ETHUMBD_DIRECTORY,
|
||||
ETHUMBD_CATEGORY,
|
||||
ETHUMBD_FRAME_FILE,
|
||||
|
|
|
@ -188,6 +188,8 @@ ethumb_new(void)
|
|||
ethumb->th = THUMB_SIZE_NORMAL;
|
||||
ethumb->crop_x = 0.5;
|
||||
ethumb->crop_y = 0.5;
|
||||
ethumb->quality = 80;
|
||||
ethumb->compress = 9;
|
||||
|
||||
ee = ecore_evas_buffer_new(1, 1);
|
||||
e = ecore_evas_get(ee);
|
||||
|
@ -375,6 +377,36 @@ ethumb_thumb_crop_align_get(const Ethumb *e, float *x, float *y)
|
|||
if (y) *y = e->crop_y;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ethumb_thumb_quality_set(Ethumb *e, int quality)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(e);
|
||||
|
||||
e->quality = quality;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
ethumb_thumb_quality_get(const Ethumb *e)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0);
|
||||
return e->quality;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ethumb_thumb_compress_set(Ethumb *e, int compress)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(e);
|
||||
|
||||
e->compress = compress;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
ethumb_thumb_compress_get(const Ethumb *e)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0);
|
||||
return e->compress;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
ethumb_frame_set(Ethumb *e, const char *theme_file, const char *group, const char *swallow)
|
||||
{
|
||||
|
@ -865,6 +897,7 @@ ethumb_image_save(Ethumb *e)
|
|||
{
|
||||
Eina_Bool r;
|
||||
char *dname;
|
||||
char flags[256];
|
||||
|
||||
evas_damage_rectangle_add(e->sub_e, 0, 0, e->rw, e->rh);
|
||||
evas_render(e->sub_e);
|
||||
|
@ -887,8 +920,9 @@ ethumb_image_save(Ethumb *e)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
r = evas_object_image_save(e->o, e->thumb_path, e->thumb_key,
|
||||
"quality=85");
|
||||
snprintf(flags, sizeof(flags), "quality=%d compress=%d",
|
||||
e->quality, e->compress);
|
||||
r = evas_object_image_save(e->o, e->thumb_path, e->thumb_key, flags);
|
||||
|
||||
if (!r)
|
||||
{
|
||||
|
|
|
@ -89,6 +89,12 @@ EAPI Ethumb_Thumb_Aspect ethumb_thumb_aspect_get(const Ethumb *e) EINA_WARN_UNUS
|
|||
EAPI void ethumb_thumb_crop_align_set(Ethumb *e, float x, float y) EINA_ARG_NONNULL(1);
|
||||
EAPI void ethumb_thumb_crop_align_get(const Ethumb *e, float *x, float *y) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI void ethumb_thumb_quality_set(Ethumb *e, int quality) EINA_ARG_NONNULL(1);
|
||||
EAPI int ethumb_thumb_quality_get(const Ethumb *e) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
|
||||
|
||||
EAPI void ethumb_thumb_compress_set(Ethumb *e, int compress) EINA_ARG_NONNULL(1);
|
||||
EAPI int ethumb_thumb_compress_get(const Ethumb *e) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
|
||||
|
||||
EAPI Eina_Bool ethumb_frame_set(Ethumb *e, const char *theme_file, const char *group, const char *swallow) EINA_ARG_NONNULL(1);
|
||||
EAPI void ethumb_frame_get(const Ethumb *e, const char **theme_file, const char **group, const char **swallow) EINA_ARG_NONNULL(1);
|
||||
|
||||
|
|
|
@ -598,7 +598,7 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
|||
DBusMessageIter iter, aiter, diter, viter, vaiter;
|
||||
Ethumb *e = client->ethumb;
|
||||
const char *entry;
|
||||
int tw, th, format, aspect;
|
||||
int tw, th, format, aspect, quality, compress;
|
||||
float cx, cy;
|
||||
const char *theme_file, *group, *swallow;
|
||||
const char *directory, *category;
|
||||
|
@ -654,6 +654,16 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
|||
dbus_message_iter_close_container(&viter, &vaiter);
|
||||
_close_variant_iter(viter);
|
||||
|
||||
_open_variant_iter("quality", "i", viter);
|
||||
quality = ethumb_thumb_quality_get(e);
|
||||
dbus_message_iter_append_basic(&viter, DBUS_TYPE_INT32, &quality);
|
||||
_close_variant_iter(viter);
|
||||
|
||||
_open_variant_iter("compress", "i", viter);
|
||||
compress = ethumb_thumb_compress_get(e);
|
||||
dbus_message_iter_append_basic(&viter, DBUS_TYPE_INT32, &compress);
|
||||
_close_variant_iter(viter);
|
||||
|
||||
_open_variant_iter("frame", "(ayayay)", viter);
|
||||
dbus_message_iter_open_container(&viter, DBUS_TYPE_STRUCT, NULL, &vaiter);
|
||||
ethumb_frame_get(e, &theme_file, &group, &swallow);
|
||||
|
@ -1048,6 +1058,38 @@ ethumb_client_crop_align_get(const Ethumb_Client *client, float *x, float *y)
|
|||
ethumb_thumb_crop_align_get(client->ethumb, x, y);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ethumb_client_quality_set(Ethumb_Client *client, int quality)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||
|
||||
ethumb_thumb_quality_set(client->ethumb, quality);
|
||||
}
|
||||
|
||||
EAPI int
|
||||
ethumb_client_quality_get(const Ethumb_Client *client)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(client, 0);
|
||||
|
||||
return ethumb_thumb_quality_get(client->ethumb);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ethumb_client_compress_set(Ethumb_Client *client, int compress)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||
|
||||
ethumb_thumb_compress_set(client->ethumb, compress);
|
||||
}
|
||||
|
||||
EAPI int
|
||||
ethumb_client_compress_get(const Ethumb_Client *client)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(client, 0);
|
||||
|
||||
return ethumb_thumb_compress_get(client->ethumb);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
ethumb_client_frame_set(Ethumb_Client *client, const char *file, const char *group, const char *swallow)
|
||||
{
|
||||
|
|
|
@ -62,6 +62,10 @@ EAPI void ethumb_client_aspect_set(Ethumb_Client *client, Ethumb_Thumb_Aspect a)
|
|||
EAPI Ethumb_Thumb_Aspect ethumb_client_aspect_get(const Ethumb_Client *client);
|
||||
EAPI void ethumb_client_crop_align_set(Ethumb_Client *client, float x, float y);
|
||||
EAPI void ethumb_client_crop_align_get(const Ethumb_Client *client, float *x, float *y);
|
||||
EAPI void ethumb_client_quality_set(Ethumb_Client *client, int quality);
|
||||
EAPI int ethumb_client_quality_get(const Ethumb_Client *client);
|
||||
EAPI void ethumb_client_compress_set(Ethumb_Client *client, int compress);
|
||||
EAPI int ethumb_client_compress_get(const Ethumb_Client *client);
|
||||
EAPI Eina_Bool ethumb_client_frame_set(Ethumb_Client *client, const char *file, const char *group, const char *swallow);
|
||||
EAPI void ethumb_client_dir_path_set(Ethumb_Client *client, const char *path);
|
||||
EAPI const char * ethumb_client_dir_path_get(const Ethumb_Client *client);
|
||||
|
|
|
@ -19,6 +19,8 @@ struct _Ethumb
|
|||
int format;
|
||||
int aspect;
|
||||
float crop_x, crop_y;
|
||||
int quality;
|
||||
int compress;
|
||||
const char *src_path;
|
||||
const char *src_key;
|
||||
const char *thumb_path;
|
||||
|
|
Loading…
Reference in New Issue