Как использовать django-siteflags для закладки объектов сайта?

Следующий код дал мне высочайшее качество с сохранением пропорций. Пробовал несколько вещей и прочитал несколько статей, представленных здесь в других ответах. Потерял два дня, и в итоге я получил лучший результат с помощью простого Java-метода (попробовал также библиотеки ImageMagick и java-image-scaling):

public static boolean resizeUsingJavaAlgo(String source, File dest, int width, int height) throws IOException {
  BufferedImage sourceImage = ImageIO.read(new FileInputStream(source));
  double ratio = (double) sourceImage.getWidth()/sourceImage.getHeight();
  if (width < 1) {
    width = (int) (height * ratio + 0.4);
  } else if (height < 1) {
    height = (int) (width /ratio + 0.4);
  }

  Image scaled = sourceImage.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING);
  BufferedImage bufferedScaled = new BufferedImage(scaled.getWidth(null), scaled.getHeight(null), BufferedImage.TYPE_INT_RGB);
  Graphics2D g2d = bufferedScaled.createGraphics();
  g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
  g2d.drawImage(scaled, 0, 0, width, height, null);
  dest.createNewFile();
  writeJpeg(bufferedScaled, dest.getCanonicalPath(), 1.0f);
  return true;
}


/**
* Write a JPEG file setting the compression quality.
*
* @param image a BufferedImage to be saved
* @param destFile destination file (absolute or relative path)
* @param quality a float between 0 and 1, where 1 means uncompressed.
* @throws IOException in case of problems writing the file
*/
private static void writeJpeg(BufferedImage image, String destFile, float quality)
      throws IOException {
  ImageWriter writer = null;
  FileImageOutputStream output = null;
  try {
    writer = ImageIO.getImageWritersByFormatName("jpeg").next();
    ImageWriteParam param = writer.getDefaultWriteParam();
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    param.setCompressionQuality(quality);
    output = new FileImageOutputStream(new File(destFile));
    writer.setOutput(output);
    IIOImage iioImage = new IIOImage(image, null, null);
    writer.write(null, iioImage, param);
  } catch (IOException ex) {
    throw ex;
  } finally {
    if (writer != null) {
      writer.dispose();
    }
    if (output != null) {
      output.close();
    }
  }
}
0
задан Matthew 31 March 2019 в 04:12
поделиться

1 ответ

Большая часть вопроса не связана с siteflags .

См. « Написание дополнительных представлений », чтобы получить пример urls.py . Например, это может выглядеть как

path('videos/<int:bookmark_id>/', views.user_bookmarked_video, name='videos_bookmarked'),

Однако ваш bookmark_id вводит в заблуждение, поскольку это идентификатор видео, а не идентификатор закладки. Более того, ваш вид называется user_bookmarked_video () , но это не то, что он делает - он просто устанавливает флаг (закладку) для некоторого видеообъекта.

Если вы планируете использовать это представление просто для установки закладки, лучше назвать ее как set_video_bookmark () и перенаправить в конце функции вместо рендеринга html.

Если вы намеревались показать все видео с закладками для текущего пользователя, то нет необходимости принимать аргумент bookmark_id для вашего просмотра и отмечать его при каждом вызове представления.

Ваш html может выглядеть так, как вы хотите, в зависимости от того, что вы хотите увидеть. Например:

<h1>{{ video.name }}</h1>
0
ответ дан idle sign 31 March 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: