// is the file an image suitable for displaying within a web page? public boolean file_is_displayable_image(String path) { Array<Object> info = new Array<Object>(); boolean result = false; info = QImage.getimagesize(gVars.webEnv, path); if (empty(info)) { result = false; } else if (!Array.in_array( info.getValue(2), new Array<Object>( new ArrayEntry<Object>(Image.IMAGETYPE_GIF), new ArrayEntry<Object>(Image.IMAGETYPE_JPEG), new ArrayEntry<Object>(Image.IMAGETYPE_PNG)))) { result = false; } else if ((intval(info.getValue("channels")) > 0) && !equal(info.getValue("channels"), 3)) { // only gif, jpeg and png images can reliably be displayed result = false; } else { // some web browsers can't display cmyk or grayscale jpegs result = true; } return booleanval( getIncluded(PluginPage.class, gVars, gConsts) .apply_filters("file_is_displayable_image", result, path)); }
// get extended image metadata, exif or iptc as available public Array<Object> wp_read_image_metadata(String file) { Array<Object> meta = new Array<Object>(); Array<Object> info = new Array<Object>(); Array<Object> iptc = new Array<Object>(); Array<Object> exif = new Array<Object>(); if (!FileSystemOrSocket.file_exists(gVars.webEnv, file)) { return new Array<Object>(); } new ListAssigner<Object>() { public Array<Object> doAssign(Array<Object> srcArray) { if (strictEqual(srcArray, null)) { return null; } wp_read_image_metadata_sourceImageType = srcArray.getValue(2); return srcArray; } }.doAssign(QImage.getimagesize(gVars.webEnv, file)); // exif contains a bunch of data we'll probably never need formatted in ways that are difficult // to use. // We'll normalize it and just extract the fields that are likely to be useful. Fractions and // numbers // are converted to floats, dates to unix timestamps, and everything else to strings. meta = new Array<Object>( new ArrayEntry<Object>("aperture", 0), new ArrayEntry<Object>("credit", ""), new ArrayEntry<Object>("camera", ""), new ArrayEntry<Object>("caption", ""), new ArrayEntry<Object>("created_timestamp", 0), new ArrayEntry<Object>("copyright", ""), new ArrayEntry<Object>("focal_length", 0), new ArrayEntry<Object>("iso", 0), new ArrayEntry<Object>("shutter_speed", 0), new ArrayEntry<Object>("title", "")); // read iptc first, since it might contain data not available in exif such as caption, // description etc if (true) /*Modified by Numiton*/ { QImage.getimagesize(gVars.webEnv, file, info); if (!empty(info.getValue("APP13"))) { iptc = new Array<Object>(); if (!empty(iptc.getArrayValue("2#110").getValue(0))) { // credit meta.putValue("credit", Strings.trim(strval(iptc.getArrayValue("2#110").getValue(0)))); } else if (!empty(iptc.getArrayValue("2#080").getValue(0))) { // byline meta.putValue("credit", Strings.trim(strval(iptc.getArrayValue("2#080").getValue(0)))); } if (!empty(iptc.getArrayValue("2#055").getValue(0)) && !empty(iptc.getArrayValue("2#060").getValue(0))) { // created datee and time meta.putValue( "created_timestamp", QDateTime.strtotime( strval(iptc.getArrayValue("2#055").getValue(0)) + " " + strval(iptc.getArrayValue("2#060").getValue(0)))); } if (!empty(iptc.getArrayValue("2#120").getValue(0))) { // caption meta.putValue("caption", Strings.trim(strval(iptc.getArrayValue("2#120").getValue(0)))); } if (!empty(iptc.getArrayValue("2#116").getValue(0))) { // copyright meta.putValue("copyright", Strings.trim(strval(iptc.getArrayValue("2#116").getValue(0)))); } if (!empty(iptc.getArrayValue("2#005").getValue(0))) { // title meta.putValue("title", Strings.trim(strval(iptc.getArrayValue("2#005").getValue(0)))); } } } // fetch additional info from exif if available if (false && /*Modified by Numiton*/ Array.in_array( wp_read_image_metadata_sourceImageType, (Array) getIncluded(PluginPage.class, gVars, gConsts) .apply_filters( "wp_read_image_metadata_types", new Array<Object>( new ArrayEntry<Object>(Image.IMAGETYPE_JPEG), new ArrayEntry<Object>(Image.IMAGETYPE_TIFF_II), new ArrayEntry<Object>(Image.IMAGETYPE_TIFF_MM))))) { exif = new Array<Object>(); if (!empty(exif.getValue("FNumber"))) { meta.putValue( "aperture", Math.round(wp_exif_frac2dec(strval(exif.getValue("FNumber"))), 2)); } if (!empty(exif.getValue("Model"))) { meta.putValue("camera", Strings.trim(strval(exif.getValue("Model")))); } if (!empty(exif.getValue("DateTimeDigitized"))) { meta.putValue( "created_timestamp", wp_exif_date2ts(strval(exif.getValue("DateTimeDigitized")))); } if (!empty(exif.getValue("FocalLength"))) { meta.putValue("focal_length", wp_exif_frac2dec(strval(exif.getValue("FocalLength")))); } if (!empty(exif.getValue("ISOSpeedRatings"))) { meta.putValue("iso", exif.getValue("ISOSpeedRatings")); } if (!empty(exif.getValue("ExposureTime"))) { meta.putValue("shutter_speed", wp_exif_frac2dec(strval(exif.getValue("ExposureTime")))); } } // FIXME: try other exif libraries if available return (Array<Object>) getIncluded(PluginPage.class, gVars, gConsts) .apply_filters( "wp_read_image_metadata", meta, file, wp_read_image_metadata_sourceImageType); }
// is the file a real image file? public boolean file_is_valid_image(String path) { Array<Object> size = new Array<Object>(); size = QImage.getimagesize(gVars.webEnv, path); return !empty(size); }
/** * wp_generate_attachment_metadata() - Generate post Image attachment Metadata * * @package WordPress * @internal Missing Long Description * @param int $attachment_id Attachment Id to process * @param string $file Filepath of the Attached image * @return mixed Metadata for attachment */ public Object wp_generate_attachment_metadata(int attachment_id, String file) { StdClass attachment = null; Array<Object> metadata = new Array<Object>(); Array<Object> imagesize = new Array<Object>(); Array<Object> sizes = new Array<Object>(); Array<Object> resized = new Array<Object>(); Object size = null; Array<Object> image_meta; attachment = (StdClass) getIncluded(PostPage.class, gVars, gConsts) .get_post(attachment_id, gConsts.getOBJECT(), "raw"); metadata = new Array<Object>(); if (QRegExPerl.preg_match( "!^image/!", getIncluded(PostPage.class, gVars, gConsts).get_post_mime_type(attachment)) && file_is_displayable_image(file)) { imagesize = QImage.getimagesize(gVars.webEnv, file); metadata.putValue("width", imagesize.getValue(0)); metadata.putValue("height", imagesize.getValue(1)); new ListAssigner<Object>() { public Array<Object> doAssign(Array<Object> srcArray) { if (strictEqual(srcArray, null)) { return null; } wp_generate_attachment_metadata_uwidth = srcArray.getValue(0); wp_generate_attachment_metadata_uheight = srcArray.getValue(1); return srcArray; } }.doAssign( wp_shrink_dimensions( intval(metadata.getValue("width")), intval(metadata.getValue("height")), 128, 96)); metadata.putValue( "hwstring_small", "height=\'" + strval(wp_generate_attachment_metadata_uheight) + "\' width=\'" + strval(wp_generate_attachment_metadata_uwidth) + "\'"); metadata.putValue("file", file); // make thumbnails and other intermediate sizes sizes = new Array<Object>(new ArrayEntry<Object>("thumbnail"), new ArrayEntry<Object>("medium")); sizes = (Array<Object>) getIncluded(PluginPage.class, gVars, gConsts) .apply_filters("intermediate_image_sizes", sizes); for (Map.Entry javaEntry147 : sizes.entrySet()) { size = javaEntry147.getValue(); resized = getIncluded(MediaPage.class, gVars, gConsts) .image_make_intermediate_size( file, intval( getIncluded(FunctionsPage.class, gVars, gConsts) .get_option(strval(size) + "_size_w")), intval( getIncluded(FunctionsPage.class, gVars, gConsts) .get_option(strval(size) + "_size_h")), booleanval( getIncluded(FunctionsPage.class, gVars, gConsts) .get_option(strval(size) + "_crop"))); if (booleanval(resized)) { metadata.getArrayValue("sizes").putValue(size, resized); } } // fetch additional metadata from exif/iptc image_meta = wp_read_image_metadata(file); if (booleanval(image_meta)) { metadata.putValue("image_meta", image_meta); } } return getIncluded(PluginPage.class, gVars, gConsts) .apply_filters("wp_generate_attachment_metadata", metadata); }