Added support to set quality and compress level.

SVN revision: 41286
This commit is contained in:
Rafael Antognolli 2009-07-09 19:16:02 +00:00
parent 5dc0fa41ef
commit f9b765ec1c
8 changed files with 184 additions and 3 deletions

View File

@ -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 },

View File

@ -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;

View File

@ -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,

View 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)
{

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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;