Как извлечь маленькие изображения из большого изображения с помощью javascript? [Дубликат]

newNameOfTable = JOptionPane.showInputDialog("Connected for saving data. " +
                                "Input name of new table:");

static String queryCreateTable = "CREATE TABLE " + newNameOfTable +
                                 "(ID INTEGER not NULL ," +
                                 "BRAND VARCHAR(40)," +
                                 "MODEL VARCHAR(40)," +
                                 "YEAR INTEGER not NULL," +
                                 "NOVELTY BINARY," +
                                 "PRIMARY KEY ( ID ))";


pStatement = connection.prepareStatement(queryCreateTable);
pStatement.executeUpdate();

Пример PreparedStatement: http://tutorials.jenkov.com/jdbc/preparedstatement.html

15
задан Outlaw Programmer 26 January 2009 в 22:08
поделиться

8 ответов

Это можно сделать, включив изображение в div «viewport». Задайте ширину и высоту на div (в соответствии с вашими потребностями), затем установите position: relative и overflow: hidden на нем.

Чтобы отобразить секцию 30x40 изображения, начиная с (10,20):

<style type="text/css">
    div.viewport {
        overflow: hidden;
        position: relative;
    }

    img.clipped {
        display: block;
        position: absolute;
    }
</style>

<script type="text/javascript">
    function setViewport(img, x, y, width, height) {
        img.style.left = "-" + x + "px";
        img.style.top  = "-" + y + "px";

        if (width !== undefined) {
            img.parentNode.style.width  = width  + "px";
            img.parentNode.style.height = height + "px";
        }
    }

    setViewport(document.getElementsByTagName("img")[0], 10, 20, 30, 40);
</script>

<div class="viewport">
    <img class="clipped" src="/images/clipped.png" alt="Clipped image"/>
</div>

Чтобы отобразить секцию 30x40 изображения, начиная с (10,20):

<style type="text/css">
    div.viewport {
        overflow: hidden;
        position: relative;
    }

    img.clipped {
        display: block;
        position: absolute;
    }
</style>

<script type="text/javascript">
    function setViewport(img, x, y, width, height) {
        img.style.left = "-" + x + "px";
        img.style.top  = "-" + y + "px";

        if (width !== undefined) {
            img.parentNode.style.width  = width  + "px";
            img.parentNode.style.height = height + "px";
        }
    }

    setViewport(document.getElementsByTagName("img")[0], 10, 20, 30, 40);
</script>

<div class="viewport">
    <img class="clipped" src="/images/clipped.png" alt="Clipped image"/>
</div>

] Общие свойства CSS связаны с классами, так что на вашей странице можно иметь несколько видовых экранов / обрезанных изображений. Функция setViewport(…) может быть вызвана в любое время, чтобы изменить, какая часть изображения отображается.

25
ответ дан Ben Blank 18 August 2018 в 00:56
поделиться
  • 1
    ОЧЕНЬ КРУТО. Работал почти мгновенно. Только проблема с вашим кодом заключается в том, что img.style.top использует параметр «x», когда он должен использовать «y», то же самое для левой. Кроме этого, он работал как шарм! – Outlaw Programmer 26 January 2009 в 22:35
  • 2
    D'о! Лемме исправить это. :-) – Ben Blank 26 January 2009 в 22:36
  • 3
    Просто для удовольствия, я также изменил setViewport, так что ширина и высота могут быть опущены, если вы не хотите их изменять. – Ben Blank 26 January 2009 в 22:56
  • 4
    есть двоеточие в конце строки overflow: hidden:, к сожалению, я не могу изменить его, так как его только однобуквенное редактирование ... – HerrHo 3 July 2012 в 10:53
  • 5
    @ donat3llo - Правильно. Мне всегда плохо, когда эти летние ответы имеют опечатки, которые я никогда не поймал. ;-) – Ben Blank 4 July 2012 в 08:35

То, что написано, по существу, позиционирует DIV внутри DIV, который имеет переполнение: скрытое. Вы можете сделать то же самое, все, что вам нужно сделать, - изменить внешний DIV в зависимости от размера каждого кадра большего изображения. Вы можете сделать это в коде легко.

Вы можете просто установить стиль внутренней DIV:

left: (your x-position = 0 or a negative integer * frame width)px

Большинство JavaScript-фреймворков делают это довольно легко.

0
ответ дан Diodeus - James MacFarlane 18 August 2018 в 00:56
поделиться

CSS также определяет стиль для отсечения. См. Свойство clip в спецификациях CSS.

1
ответ дан DMKing 18 August 2018 в 00:56
поделиться

Предположим, вы хотите сделать миниатюру для своего изображения. Вы можете использовать ImageThumbnail.js, созданные из библиотеки прототипов следующим образом:

<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="ImageThumbnail.js"></script>
<input type="file" id="photo">
<img src="empty.gif" id="thumbnail" width="80" height="0">
<script type="text/javascript">
<!--
    new Image.Thumbnail('thumbnail', 'photo');
//-->
</script>

для получения дополнительной информации

0
ответ дан ecleel 18 August 2018 в 00:56
поделиться

Свойства ширины / высоты объекта изображения документа считаны только. Однако, если вы могли бы их изменить, вы бы только хлюпали фреймами, а не обрезали фреймы так, как хотите. Вид обработки изображений, который вы хотите, не может быть выполнен с помощью javascript на стороне клиента. Я предлагаю разрезать изображения на сервере или наложить div на изображение, чтобы скрыть части, которые вы не хотите отображать.

0
ответ дан ForYourOwnGood 18 August 2018 в 00:56
поделиться
  • 1
    Да, если вы хотите обрезать изображение, которое нужно поместить в другой элемент (div является наиболее распространенным), тогда вы устанавливаете переполнение этого элемента как скрытое, и вы перемещаете изображение внутри него, также думайте об использовании изображения как фон. – Ricardo Vega 26 January 2009 в 22:20
  • 2
    У нас есть одна реализация, которая просто служит для отдельных изображений, и есть некоторый AJAX, чтобы получить их динамически. Тем не менее, мы надеялись, что загрузка 1 большого изображения и отсечение его на стороне клиента обеспечит лучший пользовательский интерфейс ... – Outlaw Programmer 26 January 2009 в 22:25

Увы, JavaScript просто не способен извлечь свойства изображения, которые вам потребуются, чтобы сделать что-то вроде этого. Тем не менее, может быть спасение в виде элемента HTML & lt; canvas> в сочетании с небольшим количеством серверных скриптов.

PHP-код, чтобы развести ширину и высоту действительно большого изображения:

<?php
$large_image = 'path/to/large_image';
$full_w = imagesx($large_image);
$full_h = imagesy($large_image);
?>

Здесь вы затем загрузите изображение в элемент & lt; canvas>, пример которого задокументирован здесь . Теперь моя теория заключалась в том, что вы можете извлекать данные пикселей из элемента & lt; canvas>; предполагая, что вы можете, вы просто убедитесь, что у вас есть определенный вид разделителя между кадрами большого изображения и затем найдите его внутри холста. Предположим, вы нашли разделитель 110 пикселей слева от изображения; вы бы знали, что каждый «кадр» был 110 пикселей в ширину, и вы уже получили полную ширину, хранящуюся в переменной PHP, поэтому расшифровка того, сколько изображения вы работаете, было бы легким.

Единственный спекулятивный аспект этого метода заключается в том, способен ли JavaScript извлекать данные цвета из указанного местоположения в изображение, загруженное в элемент & lt; canvas>; если это возможно, то то, что вы пытаетесь выполнить, вполне осуществимо.

1
ответ дан Hexagon Theory 18 August 2018 в 00:56
поделиться

попробуйте использовать haxcv-библиотеку haxcv js с помощью простых функций

перейдите к https://docs.haxcv.org/Methods/cutImage , чтобы узнать больше о его библиотеке

var Pixels = _("img").cutImage (x , y , width , height  );

_ ("img"). src (Pixels.src);

// возвращать обрезанное изображение, но сначала попробуйте включить библиотеку

0
ответ дан Manassa Joseph 18 August 2018 в 00:56
поделиться

В ответ на:

Увы, JavaScript просто не способен извлечь свойства изображения, которые вам потребуются, чтобы сделать что-то вроде этого. Тем не менее, может быть спасение в виде HTML-элемента в сочетании с небольшим количеством серверных скриптов. ...

< ? (open php) 
$large_image = 'path/to/large_image';
$full_w = imagesx($large_image);
$full_h = imagesy($large_image);
(close php) ? >

Это можно сделать в Javascript, просто google:

var newimage = new Image();
newimage.src = document.getElementById('background').src;
var height = newimage.height;
var width  = newimage.width;

Это создает новое изображение из существующего и фиксирует этот путь в java сценарий исходных свойств высоты и ширины исходного изображения (а не один id'ed в качестве фона.

В ответ на:

Свойства ширины / высоты объекта изображения документа Однако, если вы можете их изменить, вы бы только хлюпали фреймами, а не обрезали фреймы так, как вы этого хотите. Вид манипуляции с изображениями, который вы хотите, не может быть выполнен с помощью javascript на стороне клиента. Я предлагаю разрезать изображения вверх на сервере или наложить div на изображение, чтобы скрыть части, которые вы не хотите отображать.

...

var newimage = new Image();
newimage.src = document.getElementById('background').src;
var height = newimage.height;
var width  = newimage.width;
newimage.style.height = '200px';
newimage.style.width = '200px';
newimage.height = '200px';
newimage.width = '200px';

и если хотите:

newimage.setAttribute('height','200px');

В определенных обстоятельствах требуется удвоить newimage.style.height и newimage.height, чтобы убедиться, что IE будет понимать вовремя, что изображение будет изменено (вы собираетесь отобразить вещь сразу после этого, и внутренний процесс IE ng слишком медленно для этого.)

Спасибо за вышеупомянутый скрипт, который я изменил и внедрил на http://morethanvoice.net/m1/reader13.php (меню правой кнопки мыши. .. mouseover zoom lent) корректно даже в IE, но, как вы заметили, обработка изображений mousemove слишком быстра для старого IE, отображающего позицию, но только после изображения. В любом случае любая хорошая идея приветствуется.

Спасибо всем за ваше внимание, надеюсь, что приведенные выше коды помогут кому-то ...

Claudio Klemp http: // morethanvoice.net/m1/reader13.php

2
ответ дан zendar 18 August 2018 в 00:56
поделиться
Другие вопросы по тегам:

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