2016-12-07 1 views
0

Я разрабатываю тему для одного из моих клиентов.Wordpress - как работать с изображениями с автоматическим изменением

В пользовательской теме используется библиотека js, которая читается в определенной папке, а затем создает галерею, используя изображение, найденное в этой папке.

Моя идея состояла в том, чтобы использовать папку uploads, чтобы мой клиент мог самостоятельно управлять галереей без моего вмешательства.

Wordpress автоматически сохраняет несколько изображений в этой папке, но это довольно легко решить:

  • Изменение загрузки в опции
  • подпапок Изменены все размеры в 0, чтобы предотвратить изменение размера.

Эти два варианта почти работают, я говорю почти потому, что у меня все еще есть копия, сохраненная в моей папке с размерами 768x510.

Опять же, я могу закрыть глаза на это, потому что я на самом деле была другая идея ...

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

Так вот идет мой вопрос (извините за длинное интро) Можно ли написать пользовательскую функцию или есть плагин, который позволяет мне сказать:

«Хорошо, вот картина, теперь урожай (с одним размером), не переименуйте его (не добавляйте размер в конце), а затем переместите его в эту папку (Thumbnails) «

У меня пока нет коментариев , поскольку я прошу о правильном направлении и, самое главное, если это возможно!

спасибо за любые предложения

+1

Да, безусловно возможно! 'php' имеет некоторые хорошие функции для этого, я отправлю полный ответ в ближайшее время. – Nytrix

+0

большое спасибо – Nick

ответ

0

Да, это определенно возможно. Вы можете получить файлы по readdir, затем вы можете передать их через что-то вроде этого.

Образец php Изменение размера. Примечание: Это просто какая-то функция, которую я укладывал.

function resize($path,$x1,$y,$w,$h,$x2,$y2){ 
     $x = getimagesize($path);    
     switch ($x['mime']) { 
      case "image/gif": 
       $img = imagecreatefromgif($path); 
      break; 
      case "image/jpeg": 
       $img = imagecreatefromjpeg($path); 
      break; 
      case "image/png": 
       $img = imagecreatefrompng($path); 
      break; 
     } 
     $width = imagesx($img); 
     $height = imagesy($img); 
     $scalerw = ($width/$x2); 
     $scalerh = ($height/$y2); 

     $w = $w * 2; 
     $h = $h *2; 
     $img_base = imagecreatetruecolor($w,$h); 
     $x1 = $x1 * $scalerw; 
     $y = $y * $scalerh; 

     imagecopyresampled($img_base, $img,0,0,$x1,$y,$x2 * 2,$y2 * 2, $width, $height); 

     $path_info = pathinfo($path);  
     switch ($path_info['extension']) { 
      case "gif": 
       imagegif($img_base, $path); 
      break; 
      case "jpeg": 
       imagejpeg($img_base, $path); 
       break; 
      case "png": 
       imagepng($img_base, $path); 
       break; 
      case "jpg": 
       imagejpeg($img_base,$path); 
       break; 
     } 
     imagedestroy($img_base); 
    } 

Пояснение переменных:

  • $path = Путь к файлу, так сделайте петлю из всех изображений.
  • $x1 = Координата x той части изображения, которую вы хотите выбрать.
  • $y1 = Координата y той части изображения, которую вы хотите выбрать.
  • $w = Ширина части изображения, которую вы хотите выбрать.
  • $h = Высота части изображения, которую вы хотите выбрать.
  • $x2 = ширина исходного изображения
  • $y2 = Высота исходного изображения

enter image description here

Таким образом, вы можете в основном выбрать коробку так, из исходного изображения. Но, затем с php.

Как изменить путь сохранения:

Вы можете изменить путь, где она легко сохраняет, в последней части кода вы видите imagegif или любой другой в switch заявлении. Вы видите переменную $path там, то есть там, где она сохраняет (в этом случае точно где, если найдено изображение). Таким образом, вы можете точно сохранить его там, где хотите.

Я надеюсь, что все это имеет смысл, дальнейшие вопросы, пожалуйста, не стесняйтесь спрашивать.

+1

@Nick Я отредактировал свой ответ, я надеюсь, что это приблизится к тому, чего вы пытаетесь достичь. Как отметил @SeweitHotroyman, в 'wordpress' есть функции, которые могут это сделать. Плюс, добавив немного времени в это, он будет работать в любом месте. – Nytrix

0

и может использовать этот плагин Imsanity или resize image Вы можете быть, чтобы узнать разработки плагина

+0

К сожалению, у меня нет плагина для изменения размеров изображений, поскольку они уже изменены, или я могу легко использовать встроенные функции WordPress для этого. Мне нужно иметь возможность не переименовывать их и перемещать в мою папку после их загрузки – Nick

+0

проверить на [сайте] [1] и [this] [2] . Wordpress уже предоставляет несколько функций, которые вы хотите [1]: https://developer.wordpress.org/reference/functions/add_image_size/ [2]: https://developer.wordpress.org/reference/files/wp -Включает/media.php / –

2

не могли бы вы используете add_attachment и edit_attachment действия, обжигали после это было сохранено изображение, чтобы сделать ваш эскиз и сохранить его там, где хотите?

add_action('add_attachment', 'theme_attachment_handler', 999); 
add_action('edit_attachment', 'theme_attachment_handler', 999); 
... 
function theme_attachment_handler($attachment_id) { 

    $image = wp_get_image_editor($metadata['file']); 
    if (! is_wp_error($image)) { 
     $image->resize(300, 300, true); 
     $image->save('newpath/new_image.jpg'); 
    } 
    // Note you can get all the sizes here too, and cleanup: 
    $metadata = wp_get_attachment_metadata($attachment_id); 
    if(!empty($metadata['sizes'])) { 
     foreach($metadata['sizes'] as $size_name => $size_info) { 
      // delete, move, .... 
     } 
    } 
} 

Надеюсь, это поможет!

Смежные вопросы