首頁  >  問答  >  主體

是否可以使用 vuetify 規則驗證圖片寬度、高度?

我想使用 vuetify 驗證圖片寬度和高度。我編寫了一個函數來檢查圖像並與條件進行比較。雖然我可以檢查圖像的寬度、高度,但規則總是錯誤

<v-file-input 
                            :id="'file-input-' + label"
                            ref="fileInput"
                            :rules="rules.minResolution"
                            class="file-input-upload pt-0 pb-2"
                            prepend-icon=""
                            :error-messages="errorMessages"
                            @change="onChange"
                        >
                            <template #message="{ message }">
                                {{ showMessages($t(message), $t(label), maxSize) }}
                            </template>
                            <template v-if="imageError !== ''">
                                {{ $t(imageError) }}
                            </template>
                        </v-file-input>

這是匯出功能

export function minResolution(width, height, error) {
  return file => ( file && (new File(file, width, height) === true)) || error
}
function File(file, width , height) {
  const reader = new FileReader() 
  reader.readAsDataURL(file);
  reader.onload = evt => {
    const img = new Image();
    img.onload = () => {
      if (img.width >= width && img.height >= height) {
        alert(1)
        return true;
      }
    }
    img.src = evt.target.result;
  }
  return false;
}

抱歉我的英文太差了

P粉652523980P粉652523980203 天前429

全部回覆(1)我來回復

  • P粉403804844

    P粉4038048442024-03-30 10:39:18

    我不知道你的minResolution是否可以是異步的,但這是唯一的方法,帶有非同步驗證

    export async function minResolution(width, height, error) {
      return file => ( file && (await check_image_dimensions(file, width, height) === true)) || error
    }
    
    function check_image_dimensions(file, width , height) {
      const reader = new FileReader();
      reader.readAsDataURL(file);
      return new Promise(resolve => {
        reader.onload = evt => {
          const img = new Image();
          img.onload = () => {
            resolve(img.width >= width && img.height >= height);
          }
          img.src = evt.target.result;
        }
      });
    }
    

    回覆
    0
  • 取消回覆