void * trans_thread(void *unuse){ CURLcode retcode; CURL *curl = curl_easy_init(); if(curl==NULL){ fprintf(stderr,"translate failed_1\n"); pthread_exit("-1"); } char buf[512],ret_buf[MAXBUF*2],*convert_str; sprintf(buf, "%s", APIkey); convert_space(str_to_trans); convert_str = curl_easy_escape(curl,str_to_trans,strlen(str_to_trans)); strcat(buf, convert_str); curl_easy_setopt(curl, CURLOPT_URL, buf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_func); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ret_buf); retcode = curl_easy_perform(curl); curl_easy_cleanup(curl); if(retcode != 0){ fprintf(stderr,"translate failed_2\n"); pthread_exit("-1"); } cJSON *json; json = cJSON_Parse(ret_buf); if(create_trans(&trans_res, json) == -1){ fprintf(stderr,"translate failed_3\n"); pthread_exit("-1"); } if(simple_flag == 1) clprint_simple(&trans_res); else clprint_full(&trans_res); curl_free(convert_str); pthread_exit("0"); }
void process_1_image (args cli_flags, char *files) { char *out_file_name = get_out_filename (files, cli_flags); if (file_exists (out_file_name)) { printf ("| Output file %s already exists. skipping... ", out_file_name); return; } // Origional Image Properties struct img_prop o = (img_prop) malloc (sizeof (image_properties)); // set all the vales in the imapg properties struct to -1 null_ip (o); // Create a data provider CGDataProviderRef source_image_provider = CGDataProviderCreateWithFilename (files); // Check for a null returned value if (source_image_provider == NULL) { // something went wrong printf ("error: Couldn't create CGDataProvider from URL.\n"); exit (0); } // get the information from the image exif here o->image_rot = get_exif_rot (source_image_provider); // Create the image in memory from the JPEG data CGImageRef source_image = CGImageCreateWithJPEGDataProvider (source_image_provider, NULL, no, kCGRenderingIntentDefault); /********************************************/ /* Getting the colour space **/ o->colorSpace = CGImageGetColorSpace(source_image); /********************************************/ // populate the image info struct pop_img_props (source_image, o); // create a data provider from the decoded JPEG data CGDataProviderRef image_data_provider = CGImageGetDataProvider (source_image); // Create a pointer to the data section of the image in memory CFDataRef source_data_ptr = CGDataProviderCopyData (image_data_provider); // The vImage_Buffers we will use vImage_Buffer *vImage_source = (vImage_Buffer*) malloc (sizeof (vImage_Buffer)); // Check for NULL if (NULL == vImage_source) { printf ("Cannot malloc vImage_source buffer\n"); exit (0); } if (o->bits_ppixel == 24) { // convert from 24bit to 32bit by adding the alpha channel. source_data_ptr = convert24_32bit (source_data_ptr, o); } // Setup the vImage Buffer for the image setupBuffer (vImage_source, o->image_h, o->image_w, o->bytes_row); // Assign the data to the vImage Buffer for the source vImage_source->data = (void *) CFDataGetBytePtr (source_data_ptr); // Check for NULL if (vImage_source->data == NULL) printf ("Unable to get the vimage.data pointer\n"); if (o->image_rot != 1 && o->image_rot != 4 && o->image_rot != 2) // rotate the image rotate_image (vImage_source, o, NULL); // flip the image if (o->image_rot == 2 || o->image_rot == 4 || o->image_rot == 7 || o->image_rot == 5) flip_image (vImage_source, o, NULL); // Resize the images resize_image (vImage_source, o, cli_flags); // Create a colour space to be compared against CGColorSpaceRef rgb = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); if (NULL == rgb) { fprintf(stderr, "Unable to create the reference colourspace.\n"); exit(0); } // Convert the colourspace to RGB if (!CFEqual(rgb, o->colorSpace) && !cli_flags->disableCC) { vImage_source->data = convert_space(vImage_source->data, o->image_w, o->image_h); if (NULL == vImage_source->data) exit(0); } // release the reference colour space CGColorSpaceRelease(rgb); // save the image save_image (vImage_source, o, cli_flags->quality, out_file_name); // Release the source provider CGDataProviderRelease (source_image_provider); source_image_provider = NULL; // Release the source image CGImageRelease (source_image); source_image = NULL; free(source_data_ptr); // Free the filename created by get_out_filename () free (out_file_name); out_file_name = NULL; // free the image properties free (o); o = NULL; // if there is info in the buffer if (vImage_source->data != NULL) { free (vImage_source->data); vImage_source->data = NULL; } // free the buffer free (vImage_source); vImage_source = NULL; } // Process 1 image
int main(int argc, char *argv[]) { char str[] = "Hello Wolrd and Japan! "; convert_space(str); printf("%s\n", str); return 0; }