Как отобразить измененные изображения на веб-странице при поддержании соотношения сторон?

Для исполняемых файлов вы можете легко найти адрес, где хранится указатель на функцию, используя objdump. Например:

objdump -R /bin/bash | grep write
00000000006db558 R_X86_64_JUMP_SLOT  fwrite
00000000006db5a0 R_X86_64_JUMP_SLOT  write

Следовательно, 0x6db5a0 является адресом указателя для write. Если вы измените его, вызовы для записи будут перенаправлены на выбранную вами функцию. Загрузка новых библиотек в gdb и получение указателей на функции были рассмотрены в предыдущих статьях. Исполняемый файл и каждая библиотека имеют свои собственные указатели. Замена влияет только на модуль, указатель которого был изменен.

Для библиотек вам нужно найти базовый адрес библиотеки и добавить его к адресу, указанному в objdump. В Linux /proc/<pid>/maps выдает это. Я не знаю, будут ли работать независимые от позиции исполняемые файлы с рандомизацией адресов. maps -информация может быть недоступна в таких случаях.

5
задан jessegavin 11 March 2011 в 19:48
поделиться

8 ответов

Легко.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Client-Side Image Resize (Why?!)</title>
    <script type="text/javascript">
      window.onload = function() {
        var url = "http://www.google.com/intl/en_ALL/images/logo.gif";
        var img = new Image();
        img.onload = function() {
          var w = parseInt((this.width + "").replace(/px/i, ""), 10);
          var h = parseInt((this.height + "").replace(/px/i, ""), 10);

          // 50% scale
          w = (w / 2) + "px";
          h = (h / 2) + "px";

          var htmlImg = document.createElement("img");
          htmlImg.setAttribute("src", url);
          htmlImg.setAttribute("width", w);
          htmlImg.style.width = w;
          htmlImg.setAttribute("height", h);
          htmlImg.style.height = h;
          document.body.appendChild(htmlImg);
        }
        img.src = url;
      }
    </script>
  </head>
  <body>
    <h1>Look, I'm Resized!</h1>
  </body>
</html>
7
ответ дан 18 December 2019 в 09:52
поделиться

Если вас не слишком пугает флэш-память, теперь с помощью flash10 у вас есть выбор: обрабатывать загруженные файлы на стороне клиента перед отправкой их на сервер. Таким образом, вы можете использовать скрытый / прозрачный / маленький флэш-объект, чтобы позволить клиенту загрузить свое изображение, заставить флэш-память изменить размер изображения (у него есть хороший API для обработки изображений), а затем отправить байтовые данные на сервер.

as3 core lib имеет кодировщики jpeg и png, если вы хотите кодировать изображение в любой из форматов перед загрузкой.

Если у вас нет flash, вы всегда можете загрузить sdk flex 3 (или 4) и использовать flashdevelop, чтобы сделать все это gratis =)

3
ответ дан 18 December 2019 в 09:52
поделиться

Если вы хотите сделать это в операторе, то, скорее всего, лучше всего подойдут свойства высоты и ширины.

Если вам нужно что-то анимированное, вы можете использовать .animate (...) и установите высоту и ширину в качестве параметров. Это должно сделать изменение изображения плавным.

0
ответ дан 18 December 2019 в 09:52
поделиться

Я не уверен, действительно ли вы имеете в виду изменить размер изображения или просто установить размер, в котором изображение отображается. Одно невозможно, другое - задать свойства ширины и высоты с помощью jQuery.

http://docs.jquery.com/CSS/height

http://docs.jquery.com/CSS/width

1
ответ дан 18 December 2019 в 09:52
поделиться

Изображения всегда должны отображаться в том размере, в котором они должны отображаться. Лучше иметь несколько копий на сервере, а не копировать один файл по сети и пытаться манипулировать на стороне клиента. Подумайте об этом:

  • трата сетевых ресурсов для передачи изображения 500X400, когда вам действительно нужно 100X80
  • аналогичная трата ресурсов процессора в некотором API обработки изображений для сжатия / увеличения изображения на стороне клиента

Изменение размера изображения - это не просто изменение высота ширина. Если вы укажете размер, отличный от исходного размера изображения (с помощью стилей, скрипта и т. Д.), Браузер будет использовать собственный API (например, win32 draw) для правильного сжатия / увеличения изображения. Обрезать изображение (терять части изображения) проще, но это редко требуется.

-2
ответ дан 18 December 2019 в 09:52
поделиться

Изменение размера перед загрузкой будет быть очень мощным инструментом. Это уменьшит время, необходимое для загрузки изображений на сервер. Часто у наших пользователей есть 5-мегапиксельные изображения прямо со своих камер, и они не знают, как уменьшить размер с помощью редактора изображений. Мы хотим загрузить фотографию шириной 1500 пикселей, jpg или png, сжатую до размера менее 500 Кбайт.

Этот наряд Thin File утверждает, что может это делать, но я еще не проверял. Я скорее надеялся найти способ использовать JQuery для того же.

3
ответ дан 18 December 2019 в 09:52
поделиться

flash 10 поддерживает изменение размера изображений на стороне клиента:

http://www.swfupload.org/

3
ответ дан 18 December 2019 в 09:52
поделиться

http://www.shift8creative.com/projects/agile-uploader/index.html Измените размер перед загрузкой. Гибкая, тесная интеграция с JavaScript, позволяет использовать любой серверный язык, быстрое и качественное изображение.

Более приятная демонстрация, чем главная страница, демонстрирующая интеграцию с JavaScript: http://www.shift8creative.com/projects/agile-uploader/advanced-demo.html

Бесплатно как в пиве. Надеюсь, поможет.

2
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

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