# 存高解析度圖（pixelDensity）

正式網址：https://newmediaart.course.monolab.world/snippets/save-hires

pixelDensity(2) 讓 600×600 的畫布存出 1200×1200 的圖；要印刷就調到 3、4，存出來的尺寸＝寬高 × 密度。

- **分類**：存檔與輸出
- **行數**：38 行（p5.js 1.x／2.x）
- **在哪一堂用到**：[第 1 堂](https://newmediaart.course.monolab.world/lesson/01)

在自己的 setup() 裡、createCanvas 的下一行加上 pixelDensity(2)。動態作品密度太高會變慢：平常用 1，要存圖前再改成 3 或 4。

```js
// 高解析度存圖：畫布 600×600，pixelDensity(2) 存出來是 1200×1200
function setup() {
  createCanvas(600, 600);
  // 放在 createCanvas 之後。要印海報就改 3 或 4（存出 1800、2400 像素），
  // 數字越大越吃效能
  // Retina 螢幕預設就是 2；寫死一個數字，換哪台電腦存出來都一樣大
  pixelDensity(2);
  noLoop(); // 靜態作品畫一次就好，密度調高也不會卡
}

function draw() {
  background(245, 240, 230);
  noFill();
  stroke(30);
  for (let r = 20; r < 580; r += 14) {
    circle(width / 2, height / 2, r);
  }
}

function keyPressed() {
  if (key === 's' || key === 'S') {
    // 存出來的尺寸＝寬 × 密度、高 × 密度；檔名順便記下尺寸
    const w = width * pixelDensity();
    const h = height * pixelDensity();
    saveCanvas('sketch-' + timestamp() + '-' + w + 'x' + h, 'png');
  }
}

// 補零：7 → "07"。檔名長度一致，資料夾裡才會照時間排好
function pad(n) {
  return String(n).padStart(2, '0');
}

// 現在的日期時間：2026-09-29-1905-12（年-月-日-時分-秒）
function timestamp() {
  return year() + '-' + pad(month()) + '-' + pad(day()) + '-' +
    pad(hour()) + pad(minute()) + '-' + pad(second());
}
```

## 同類常用指令・存檔與輸出

- [按 S 存 JPG（檔名帶日期時間）](https://newmediaart.course.monolab.world/snippets/save-jpg-datetime)
- [按 S 存 PNG（透明背景）](https://newmediaart.course.monolab.world/snippets/save-png-transparent)
- [按 G 存 3 秒 GIF（saveGif）](https://newmediaart.course.monolab.world/snippets/save-gif)
- [按 V 錄 5 秒影片（WebM）](https://newmediaart.course.monolab.world/snippets/record-webm)

[回到全部常用指令](https://newmediaart.course.monolab.world/snippets)

[到 Hahow 報名](https://hahow.in/cr/creative-code)。價格與優惠以 Hahow 頁面為準。
