예제 #1
0
  // 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));
  }
예제 #2
0
  // 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);
  }
예제 #3
0
  // 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);
  }
예제 #4
0
  /**
   * 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);
  }