static gboolean gth_png_saver_save_pixbuf (GthPixbufSaver *self, GdkPixbuf *pixbuf, char **buffer, gsize *buffer_size, const char *mime_type, GError **error) { char *pixbuf_type; char **option_keys; char **option_values; int i = -1; int i_value; gboolean result; pixbuf_type = get_pixbuf_type_from_mime_type (mime_type); option_keys = g_malloc (sizeof (char *) * 2); option_values = g_malloc (sizeof (char *) * 2); i++; i_value = eel_gconf_get_integer (PREF_PNG_COMPRESSION_LEVEL, 6); option_keys[i] = g_strdup ("compression");; option_values[i] = g_strdup_printf ("%d", i_value); i++; option_keys[i] = NULL; option_values[i] = NULL; result = gdk_pixbuf_save_to_bufferv (pixbuf, buffer, buffer_size, pixbuf_type, option_keys, option_values, error); g_strfreev (option_keys); g_strfreev (option_values); g_free (pixbuf_type); return result; }
static gboolean gth_image_saver_jpeg_save_image (GthImageSaver *base, GthImage *image, char **buffer, gsize *buffer_size, const char *mime_type, GCancellable *cancellable, GError **error) { #ifdef HAVE_LIBJPEG GthImageSaverJpeg *self = GTH_IMAGE_SAVER_JPEG (base); char **option_keys; char **option_values; int i = -1; int i_value; cairo_surface_t *surface; gboolean result; option_keys = g_malloc (sizeof (char *) * 5); option_values = g_malloc (sizeof (char *) * 5); i++; i_value = g_settings_get_int (self->priv->settings, PREF_JPEG_QUALITY); option_keys[i] = g_strdup ("quality"); option_values[i] = g_strdup_printf ("%d", i_value); i++; i_value = g_settings_get_int (self->priv->settings, PREF_JPEG_SMOOTHING); option_keys[i] = g_strdup ("smooth"); option_values[i] = g_strdup_printf ("%d", i_value); i++; i_value = g_settings_get_boolean (self->priv->settings, PREF_JPEG_OPTIMIZE); option_keys[i] = g_strdup ("optimize"); option_values[i] = g_strdup (i_value != 0 ? "yes" : "no"); i++; i_value = g_settings_get_boolean (self->priv->settings, PREF_JPEG_PROGRESSIVE); option_keys[i] = g_strdup ("progressive"); option_values[i] = g_strdup (i_value != 0 ? "yes" : "no"); i++; option_keys[i] = NULL; option_values[i] = NULL; surface = gth_image_get_cairo_surface (image); result = _cairo_surface_write_as_jpeg (surface, buffer, buffer_size, option_keys, option_values, error); cairo_surface_destroy (surface); g_strfreev (option_keys); g_strfreev (option_values); #else /* ! HAVE_LIBJPEG */ GdkPixbuf *pixbuf; char *pixbuf_type; gboolean result; pixbuf = gth_image_get_pixbuf (image); pixbuf_type = get_pixbuf_type_from_mime_type (mime_type); result = gdk_pixbuf_save_to_bufferv (pixbuf, buffer, buffer_size, pixbuf_type, NULL, NULL, error); g_free (pixbuf_type); g_object_unref (pixbuf); #endif /* HAVE_LIBJPEG */ return result; }